[問題] 不要return reference to local object

看板C_and_CPP作者 (dada)時間14年前 (2012/02/08 01:51), 編輯推噓3(3011)
留言14則, 7人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) devc++ 問題(Question): 返回reference to a local object 我實際練習書上提供的範例 發現編輯的過 依造書上的說法在執行期會發生錯誤 在記憶體上儲存的空間 釋放掉 將不再具有意義 (c++ primer 4/e 中文版 p248底下) 問題是=>為什麼我編輯的過 程式碼(Code):(請善用置底文網頁, 記得排版) /*擷取書上程式*/ const string &mainip(const string& s) { string ret=s; return ret; //錯誤:返回a reference to a local object! } /*擷取書上程式*/ int main(){ cout<<mainip("abcdefghijklmnopqrstuvwxyz")<<endl; } ※ 編輯: wasidada 來自: 125.230.138.101 (02/08 01:52) ※ 編輯: wasidada 來自: 125.230.138.101 (02/08 01:54)

02/08 02:06, , 1F
你自己都說了「執行期」錯誤 當然「編輯期」不會報錯
02/08 02:06, 1F

02/08 02:07, , 2F
指的是轉成執行檔的時候 會發生錯誤嗎???
02/08 02:07, 2F

02/08 02:36, , 3F
語法對就能過,背起來
02/08 02:36, 3F

02/08 09:58, , 4F
compiler沒有那麼神知道你想幹什麼=_=
02/08 09:58, 4F

02/08 10:03, , 5F
int *p = (int *)1; cout << *p << endl; 編譯也會過XD
02/08 10:03, 5F

02/08 10:14, , 6F
這種事很危險 重點就在於它"結果不一定會錯"
02/08 10:14, 6F

02/08 10:14, , 7F
所以你會有自己好像寫對了的錯覺
02/08 10:14, 7F
※ 編輯: wasidada 來自: 114.41.66.145 (02/09 01:29)

02/09 02:07, , 8F
請問int *p = (int *)1 這一句如何解讀 沒看過這種語法
02/09 02:07, 8F

02/09 08:23, , 9F
你只要知道「能過的不一定能用」就夠了 XD 那句不太重要
02/09 08:23, 9F

02/09 10:02, , 10F
那個就強制轉型
02/09 10:02, 10F

02/09 15:03, , 11F
恩 謝了 4e 第一篇只有小小一段 後面會提 我在加強
02/09 15:03, 11F

02/09 15:03, , 12F
強制轉型這方面
02/09 15:03, 12F

02/09 16:25, , 13F
強制轉型不檢查正確性,轉型後型態就配合參數的型態
02/09 16:25, 13F

02/09 16:25, , 14F
所以在語意上是ok的,這樣編譯就會過
02/09 16:25, 14F
文章代碼(AID): #1FCMI4Df (C_and_CPP)