#include <iostream>
using namespace std;
struct Y;
struct X
{
X(const Y&) { cout << "converting constructor" << endl; }
};
struct Y
{
operator X() { cout << "conversion function" << endl; }
};
void f(X x) {}
int main()
{
Y y;
f(y);
}
在上面,转换函数被我的编译器(gcc 4.6.1)赋予了转换构造函数的优先权,但是在标准中它声明:
User-defined conversions are applied only where they are unambiguous
在这种情况下似乎存在歧义。谁能解释一下矛盾?
我原以为上面的代码不会编译。我也很确定几年前 Scott Meyers 写了关于这个特定示例的文章,并说它无法编译。我错过了什么?
最佳答案
因为 X 构造函数需要一个 const
参数,所以它更喜欢运算符。如果您在 X 构造函数中删除 const
,那么编译器会提示歧义。如果有多个具有引用参数的函数,则首选具有最宽松的 const 限定的函数。
一个很好的答案here
关于C++11:传递值参数初始化中转换构造函数和转换函数之间的歧义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9661078/