當函數返回值是引用


同其他引用類型一樣,如果函數返回引用,則該引用僅是它所引對象的一個別名。舉個例子來說明,假定某函數挑出兩個string 形參中較短的那個並返回其引用:函數的返回類型決定函數調用是否是左值。

const string &shorterString(const string &s1, const string &s2){
    return s1.size() <= s2.size() ? s1 : s2;
}

其中形參和返回類型都是 const string 的引用,不管是調用函數還是返回結果都不會真正拷貝 string對象。

調用一個返回引用的函數得到左值,其他返回類型得到右值。

可以像使用其他左值那樣來使用返回引用的函數的調用,特別是,我們能為返回類型是非常量引用的函數的結果賦值∶

char &get_val(string &str, string::size_type ix){
    return str[ix];
}

int main(){
    string s("a value");
    cout << s << endl;
    get_val(s, 0) = 'A';
    cout << a << endl;
    return 0;
}

把函數調用放在賦值語句的左側可能看起來有點奇怪,但其實這沒什么特別的。

返回值是引用,因此調用是個左值,和其他左值一樣它也能出現在賦值運算符的左側。

如果返回類型是常量引用,我們不能給調用的結果賦值,這一點和我們熟悉的情況是一樣的∶

shorterString("hi", "bye") = "X";     // 錯誤:返回值是一個常量


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM