讓我們有這樣的代碼:C++:轉換運算符與賦值運算符與轉換構造優先
Test1 t1;
Test2 t2;
t1 = t2;
我相信有三種方式可以實現t1 = t2
- (或更多?)在
Test1
- 超載賦值運算符重載型投運營商
Test2
- 創建
Test1(const Test2&)
轉換構造
根據我的GCC的測試,這是使用何種優先級:
- 賦值運算符
- 轉換構造函數和類型轉換操作符(曖昧)
- 常量轉換構造和const類型轉換運算符(含糊)
請幫我理解爲什麼這個優先級。
我用於測試代碼(取消註釋一些線路試行)
struct Test2;
struct Test1 {
Test1() { }
Test1(const Test2& t) { puts("const constructor wins"); }
// Test1(Test2& t) { puts("constructor wins"); }
// Test1& operator=(Test2& t) { puts("assign wins"); }
};
struct Test2 {
Test2() { }
// operator Test1() const { puts("const cast wins"); return Test1(); }
// operator Test1() { puts("cast wins"); return Test1(); }
};
int main() {
Test1 t1;
Test2 t2;
t1 = t2;
return 0;
}
'Test1 :: Test1(const Test2&)'不是「複製構造函數」,它是一個「轉換構造函數」。 – aschepler
這篇文章解釋了爲什麼轉換運算符具有更高的優先級:http://stackoverflow.com/questions/1384007/conversion-constructor-vs-conversion-operator-precedence –