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

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

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

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

在SO上閱讀有關(guān)轉(zhuǎn)換運(yùn)算符和構(gòu)造函數(shù)的一些問題后,我開始思考它們之間的交互,即何時存在“模棱兩可”的調(diào)用??紤]以下代碼: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的轉(zhuǎn)換運(yùn)算符”,這意味著與構(gòu)造函數(shù)相反,該轉(zhuǎn)換運(yùn)算符被調(diào)用。如果您operator B()從中刪除/注釋掉代碼A,編譯器將很樂意切換到使用構(gòu)造函數(shù)(無需對代碼進(jìn)行其他更改)。我的問題是:由于編譯器不認(rèn)為B b = A();是模棱兩可的調(diào)用,因此這里必須有某種優(yōu)先級在起作用。確切的位置在哪里建立?(來自C ++標(biāo)準(zhǔn)的引用/引用將不勝感激)從面向?qū)ο蟮恼軐W(xué)角度來看,這是代碼應(yīng)該如何行為的方式嗎?誰更了解A對象應(yīng)如何成為B對象,A或者B?根據(jù)C ++,答案是A-面向?qū)ο蟮膶?shí)踐中是否有任何建議可以說明這種情況?就我個人而言,無論哪種方式都有意義,因此我很想知道如何做出選擇。提前致謝
查看完整描述

3 回答

?
慕勒3428872

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超6個贊

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


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


A a;


B b = a;


查看完整回答
反對 回復(fù) 2019-10-26
  • 3 回答
  • 0 關(guān)注
  • 639 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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