以下内容可以正常工作:
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
之间进行的,但在错误的情况下,这将需要一系列的两个转换,首先从 const char *
到 std::string
,然后从 std::string
到 WithString
。所以也许这就是原因,但我不确定。