use*_*185 10 c++ constructor constructor-overloading
我有一个像这样的课:
class Test{
public:
Test(string value);
Test(bool value);
};
Run Code Online (Sandbox Code Playgroud)
如果我创建这样的对象:
Test test("Just a test...");
Run Code Online (Sandbox Code Playgroud)
bool构造函数被调用!
谁知道为什么?
谢谢
Bil*_*rey 18
"Just a test..."is 的类型const char *,可以隐式转换为bool或者std::string.因为std::string不是内置类型,所以const char *s被转换为a bool.您可以通过显式转换const char *为a 来防止这种情况std::string:
Test test(std::string("Just a test..."));
Run Code Online (Sandbox Code Playgroud)
这是一个众所周知的C++烦恼.
您的字符串文字具有聊天const []的类型.你有两个构造函数,从char const []到Test的转换序列如下所示:
1)char const [] - > char const* - > bool
2)char const [] - > char const* - > std :: string
1)是内置的标准转换,而2)是用户定义的转换.内置转换优先于用户定义的转换,因此您的字符串文字转换为bool比转换为std :: string更容易.