1、當一個變量是函數內部存在的,這個變量被稱為本地變量,并且該函數要返回這個內部的變量,你就要以值傳遞的方式返回此值。因為如果以指針或者引用返回此值,這個值會在函數結束運行以后消失,那么這個引用或者指針就會懸空;
2、哪怕一個函數操作的是外部傳進來的引用或者指針,只要你返回的不再是那個引用或者指針,而是由這個引用或者指針加工出來的東西的時候,這種情況就轉換成1的情況了,所以還是按照1來處理;
3、當一個類中沒有公有的COPY構造函數時,它應當返回引用。這是為啥?你要知道COPY構造函數接收的是一個同類型的對象返回的也是一個同類型的對象。因為它不是公有的這就決定你在初始化對象的時候就不能用該類對象作為右值,因此該類的對象必然是用來處理其他類型的對象的,或者其他的類型變量,所以這些處理過程必須集中于一個該類對象的身上,假設你返回的不是引用而是值,那就會形成很多分COPY,你最終可能會達到目的,但是你使用的必然是最后一個COPY,在它之前還有許多COPY充當了中間環節,并且每一個COPY都是前一個COPY的疊加,這個是完全沒有必要的。因為返回值是值而不是引用,系統花費在創建COPY這一塊的資源是相當多的;
4、對于那些只對參數進行進一步加工但是維持該參數原有地址不變的函數可以返回引用或指針。