#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)优先于转换构造,但在标准它指出:C++ 11:在传递值参数初始化中转换构造函数和转换函数之间的歧义?
User-defined conversions are applied only where they are unambiguous
这似乎在这种情况下是不明确的。任何人都可以解释矛盾吗?
我会期望上面的不编译。我也很确定几年前,斯科特迈尔斯写了这个具体的例子,并说它不会编译。我错过了什么?
顺便说一句,有什么C++ 11的特定代码sample.The代码是即使在C++ 03有效。 – 2012-03-12 02:57:01
Downvoting这个的原因是什么?请指出原因,如果您表示您认为自己的感觉错误,并且您无法想出任何逻辑/技术原因来证明downvote的理由,请考虑自己没有资格进行downvoting。 – 2012-03-12 09:31:24
对不起。我认为我之所以低估它的原因已经在接受的答案中给出了。构造函数*可以被转换使用。但它不是优选的。 – 2012-03-12 19:43:23