我最近遇到了一个像下面这样的类
class Foo {
public:
Foo(std::string msg) {}
private:
Foo(bool b) {}
};
我注意到尝试通过以下方式创建此类的对象
Foo foo("blah");
导致编译错误,告诉它Foo::Foo(bool)
是私有的。显然,如果参数不是实际的 std::string,编译器更喜欢使用带有bool
参数的构造函数。另一方面,如果没有给出私有构造函数,上面的代码编译得很好。
为什么“-constructor bool
”优先于string
“-constructor”尽管传递的参数的类型不适合它们中的任何一个?这只是一个定义问题,还是有更深层次的含义和一些充分的理由?