第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

轉換構造函數(shù)與轉換運算符:優(yōu)先級

轉換構造函數(shù)與轉換運算符:優(yōu)先級

在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-面向對象的實踐中是否有任何建議可以說明這種情況?就我個人而言,無論哪種方式都有意義,因此我很想知道如何做出選擇。提前致謝
查看完整描述

3 回答

?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

似乎MSVS2008對構造函數(shù)選擇有自己的見解:無論A運算符的常量性如何,它都在B中調用復制構造函數(shù)。因此,即使標準指定了正確的行為,在這里也要小心。


我以為MSVS只是在轉換運算符之前搜索合適的構造函數(shù),但隨后發(fā)現(xiàn),如果從B的構造函數(shù)中刪除const字,它將開始調用A的運算符B()。對于臨時對象,它可能具有某些特殊行為,因為以下代碼仍調用B的構造函數(shù):


A a;


B b = a;


查看完整回答
反對 回復 2019-10-26
  • 3 回答
  • 0 關注
  • 635 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號