sym*_*nic 6 c++ overloading type-conversion
我最近遇到了类似以下的课程
class Foo {
public:
Foo(std::string msg) {}
private:
Foo(bool b) {}
};
Run Code Online (Sandbox Code Playgroud)
我注意到试图通过创建这个类的对象
Foo foo("blah");
Run Code Online (Sandbox Code Playgroud)
导致编译错误,告知它Foo::Foo(bool)是私有的.显然,如果参数不是实际的std :: string,编译器更喜欢将构造函数与bool参数一起使用.另一方面,如果没有给出私有构造函数,上面的代码编译就好了.
为什么"-constructor bool"优先于string"-constructor"althogh传递的参数的类型不适合它们中的任何一个?这只是一个定义的问题,还是有更深层次的意义和一些好理由?
原因与转换运算符优先级有关.每个调用都包含一个隐式转换
std::stringbool在这种情况下,#1是用户定义的转换,#2是语言/编译器定义的转换.用户定义的转换具有低得多的优先级,因此优选其他转换.
编辑
这是一个类似的问题,它对所涉及的优先检查有更深入的解释
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |