在SO上閱讀有關轉換運算符和構造函數(shù)的一些問題后,我開始思考它們之間的交互,即何時存在“模棱兩可”的調用。考慮以下代碼:class A;class B { public: B(){} B(const A&) //conversion constructor { cout << "called B's conversion constructor" << endl; } };class A { public: operator B() //conversion operator { cout << "called A's conversion operator" << endl; return B(); } };int main(){ B b = A(); //what should be called here? apparently, A::operator B() return 0;}上面的代碼顯示“稱為A的轉換運算符”,這意味著與構造函數(shù)相反,該轉換運算符被調用。如果您operator B()從中刪除/注釋掉代碼A,編譯器將很樂意切換到使用構造函數(shù)(無需對代碼進行其他更改)。我的問題是:由于編譯器不認為B b = A();是模棱兩可的調用,因此這里必須有某種優(yōu)先級在起作用。確切的位置在哪里建立?(來自C ++標準的引用/引用將不勝感激)從面向對象的哲學角度來看,這是代碼應該如何行為的方式嗎?誰更了解A對象應如何成為B對象,A或者B?根據(jù)C ++,答案是A-面向對象的實踐中是否有任何建議可以說明這種情況?就我個人而言,無論哪種方式都有意義,因此我很想知道如何做出選擇。提前致謝
轉換構造函數(shù)與轉換運算符:優(yōu)先級
湖上湖
2019-10-26 13:08:06