C++ 返回類型和return語句
值是如何返回的
返回一個值的方式和初始化一個變量或形參的方式完全一樣,返回的值用于初始化調(diào)用點的一個臨時量,該臨時量就是函數(shù)調(diào)用的結(jié)果。
如果函數(shù)返回引用,則該引用僅是他所引用對象的一個別名。

其中形參和返回類型都是const string的引用,不管是調(diào)用函數(shù)還是返回結(jié)果都不會真正拷貝string對象。
不要返回局部對象的引用或指針
函數(shù)完成后,他所占的空間也會隨之被釋放掉,因此函數(shù)終止意味著局部變量的引用將指向不再有效的內(nèi)存區(qū)域。

上面兩條語句都將返回未定義的值,對于第一條return語句,顯然他返回了局部對象的引用,第二條return語句,字符串字面值轉(zhuǎn)換成一個局部臨時string對象,對于manip來說,該對象和ret一樣是局部的,當函數(shù)結(jié)束時臨時對象占用的空間隨之釋放,所以兩條語句都指向了不可再用的內(nèi)存空間。
指針和引用同樣,都是指向了不存在的對象。
返回類類型的函數(shù)和調(diào)用運算符
調(diào)用函數(shù)的優(yōu)先級和點運算符、箭頭運算符相同,并且也符合左結(jié)合律。

因為上面運算符滿足左結(jié)合律,所以shorterString的結(jié)果是點運算符的左側(cè)運算對象。
引用返回左值
函數(shù)的返回類型決定函數(shù)調(diào)用是否是左值。調(diào)用一個返回引用的函數(shù)得到左值,其他返回類型得到右值,可以像使用其他左值一樣使用返回引用函數(shù)。

get_val函數(shù)返回的是引用,因此調(diào)用是個左值。
列表初始化返回值
函數(shù)可以返回花括號包圍的值的列表,此列表也用來對表示函數(shù)返回的臨時量進行初始化。

主函數(shù)main的返回值
我們允許主函數(shù)沒有return語句直接結(jié)束,因為編譯器在main函數(shù)結(jié)尾沒有發(fā)現(xiàn)return的話就會隱式插入一條返回0的return語句。