小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

引用

 sun317 2012-11-19
引用就是對象的另一個名字。在實際程序中,引用主要用作函數(shù)的形式參數(shù)。在引用的情況下,每一種引用類型都“關(guān)聯(lián)到”某一其他類型。不能定義引用類型的引用,但可以定義任何其他類型的引用。
引用必須用與該引用同類型的對象初始化:
int ival = 1024;
int &refVal = ival; // ok: refVal refers to ival
int &refVal2; // error: a reference must be initialized
int &refVal3 = 10; // error: initializer must be an object
 
const 引用:
const 引用是指向 const 對象的引用:
const int ival = 1024;
const int &refVal = ival; // ok: both reference and object areconst
int &ref2 = ival; // error: non const reference to aconst object
可以讀取但不能修改 refVal ,因此,任何對 refVal 的賦值都是不合法的。這個限制有其意義:不能直接對 ival 賦值,因此不能通過使用 refVal 來修改ival。
同理,用 ival 初始化 ref2 也是不合法的:ref2 是普通的非 const 引用,因此可以用來修改 ref2 指向的對象的值。通過 ref2 對 ival 賦值會導(dǎo)致修改const 對象的值。為阻止這樣的修改,需要規(guī)定將普通的引用綁定到 const 對象是不合法的。
 
const 引用可以初始化為不同類型的對象或者初始化為右值,如字面值常量:
int i = 42;
// legal for const references only
const int &r = 42;
const int &r2 = r + i;
同樣的初始化對于非 const 引用卻是不合法的,而且會導(dǎo)致編譯時錯誤。觀察將引用綁定到不同的類型時所發(fā)生的事情,容易理解上述行為,假如我們編寫
double dval = 3.14;
const int &ri = dval;
編譯器會把這些代碼轉(zhuǎn)換成以下形式的編碼:
int temp = dval; // create temporary int from the double
const int &ri = temp; // bind ri to that temporary
如果 ri 不是 const,那么可以給 ri 賦一新值。這樣做不會修改 dval,而是修改了 temp。期望對 ri 的賦值會修改 dval 的程序員會發(fā)現(xiàn) dval 并沒有被修改。僅允許 const 引用綁定到需要臨時使用的值完全避免了這個問題,因為 const 引用是只讀的。
 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多