为什么我的重载C++构造函数没有被调用?

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)

  • 修复是正确的,但解释并不完全正确.你*可以*隐式地从`const char*`转换为`std :: string`(通过`std :: string`的构造函数之一).只是bool转换是首选. (2认同)

Max*_*kin 8

这是一个众所周知的C++烦恼.

您的字符串文字具有聊天const []的类型.你有两个构造函数,从char const []到Test的转换序列如下所示:

1)char const [] - > char const* - > bool

2)char const [] - > char const* - > std :: string

1)是内置的标准转换,而2)是用户定义的转换.内置转换优先于用户定义的转换,因此您的字符串文字转换为bool比转换为std :: string更容易.