【发布时间】:2017-05-30 11:12:20
【问题描述】:
这些工作:
struct WithString {
WithString(std::string){};
};
void takeString(std::string){}
//implicit conversions:
takeString("hello");
WithString("hello");
但这不是:
WithString makeWithString() { return "hello";}
// error: no viable conversion from returned value of type 'const char [6]'...
如果“hello”在前两种情况下被隐式转换为std::string,为什么不能在最后一种情况下呢?请注意,我没有将WithString 构造函数指定为explicit,所以我希望这样的转换。
我可以通过这样做使行为起作用:
struct WithString {
WithString(std::string){};
WithString(const char *){};
};
我只是对这种奇怪现象感到好奇。如果我假设一个猜测,我会说这是因为在前两个工作案例中,转换在 const char * 到 std::string 之间,但在错误情况下,这将需要一个 2 转换链,首先来自 @ 987654329@ 到 std::string,然后从 std::string 到 WithString。所以也许这就是原因,但我不确定。
【问题讨论】:
标签: c++ implicit-conversion stdstring char-pointer object-construction