問(wèn)題:
void increment(double& x){ x+=1.0;}int n=5;increment(n);上述代碼錯(cuò)誤“非常量引用的初始值必須是左值”
因?yàn)?int 和double 類(lèi)型不一致,首先會(huì)執(zhí)行隱式類(lèi)型轉(zhuǎn)換,產(chǎn)生一個(gè)臨時(shí)變量。
const double tmp=(double)n這樣傳給函數(shù)的就是一個(gè)常量。用一個(gè)常量(右值)對(duì)非常量類(lèi)型引用賦值,會(huì)出錯(cuò)。
修改1:
void increment(double& x){ x+=1.0;}double n=5;//改為double型increment(n);修改2:
void increment(double const & x){ //x不能修改}int n=5;increment(n);事實(shí)上編譯器拒絕對(duì)非常量引用執(zhí)行隱式轉(zhuǎn)換(因?yàn)殡[式轉(zhuǎn)換的中間臨時(shí)變量是一個(gè)常量,編譯時(shí)無(wú)法通過(guò))
注:引用初始化后,不可以修改。指的不是不能修改它引用的變量的值,而是不能讓它在引用其他變量。
int a=0;int b=1;int &c=a;&c=b;//錯(cuò)誤新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注