【发布时间】:2013-02-26 21:24:16
【问题描述】:
我最近遇到了一个像下面这样的类
class Foo {
public:
Foo(std::string msg) {}
private:
Foo(bool b) {}
};
我注意到尝试通过以下方式创建此类的对象
Foo foo("blah");
导致编译错误,告诉Foo::Foo(bool) 是私有的。显然,如果参数不是实际的 std::string,编译器更喜欢使用带有 bool 参数的构造函数。另一方面,如果没有给出私有构造函数,上面的代码编译得很好。
为什么“bool-constructor”优先于“string-constructor”尽管传递的参数的类型不适合它们中的任何一个?这只是定义问题,还是有更深层次的含义和充分的理由?
【问题讨论】:
-
不确定为什么,但它们应该(可能)都是
explicit。 -
其实显式关键字并没有改变行为
-
在这种情况下不会。
标签: c++ type-conversion overloading