#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