1樓:匿名使用者
我不是大神,但我大概知道你是怎麼回事。
你的引數是const string&型別,首先你要知道string&前為什麼要加const. 還有你要知道const物件和非const物件的區別在**。
物件前加const, 則只能呼叫該物件的const方法,換句話說,不能對其進行任何內容上的修改。而傳&是因為要避免複製構造,所以引數為const string&.
那麼再來說說你的函式體內的這行**,首先word+ending將產生一個臨時物件,因為呼叫了string內部的string operator(const string& lhs, const string& rhs)函式。基於此,你的函式就不能返回引用。因為函式體內的臨時物件在函式出棧之後會被銷燬。
所以除非你取消+號,只返回某個引數。不然就不能返回引用!
接下來說說你的const問題。因為你的引數是const的,但是你返回的時候卻把const給取消了,返回了string&. 這是絕對不允許的。
你可以想象,const物件是對普通物件的一種限制,那麼由普通物件變成const物件,這種是允許的,因為限制沒有被放大。但是反過來,由一個const物件變成普通物件,你試圖放大這種限制就不被允許了。除非你使用c++提供的const_cast轉換!
2樓:匿名使用者
const string 不能繫結為string 引用,編譯器已經說的很明白了
C 函式返回型別是引用的問題,C 函式返回值為引用型別時出錯!大神進!
引用就是變數的別名,返回c3的引用,返回的就是c3 c3被清除,再呼叫c3的函式,結果當然不正確 如果返回 i 後,i被清除,但是返回值已經被輸出了,結果是正確的 返回c型別,g函式返回 的是c型別的一個物件,雖然c3被清除,但是返回的物件還能呼叫get函式 你可以在c類中增加一個解構函式,除錯執行...
c語言函式返回值,c語言的函式返回值?
這個跟庫函式的定義有關。還有就是編譯器的差異。有些編譯器預設是非0為真,有些非 1為真。建議不要使用這麼簡單粗暴的辦法判斷。請使用c提供的標準巨集判斷。在 學的。呃。自己寫 寫多了自然就知道了 根據你的程式來看應該是一個void型,不過你這是一個交換資料函式,如果這樣傳進來,是修改不了原址的 而如果...
C 函式返回引用問題,c 函式返回引用問題
include using namespace std int a int index int i 這裡需要申明一下 否則main不能呼叫index函式 int main index 2 25 cout 返回引用 1 主函式main的返回值 這裡提及一點,返回0表示程式執行成功。2 返回非引用型別 ...