Re: [問題] reference 問題

看板C_and_CPP (C/C++)作者時間16年前 (2009/09/16 22:20), 編輯推噓3(302)
留言5則, 2人參與, 最新討論串5/5 (看更多)
※ 引述《QQ29 (我愛阿蓉)》之銘言: : 謝謝l大的解釋但是還有一些地方不解 請教各位 : : const string& s = string("hello"); : : 由 string("hello") 產生的暫時物件,生命週期和 s 相同。 : 那為什麼 或是有什麼必要性 必須要使用ref=temp ref這種寫法呢? 當你需要動態多型的時侯.. class AAA { public: virtual foo(); } class BBB : public AAA { public: virtual foo(); } AAA& fake_a = BBB(); fake_a.foo(); // 呼叫的是BBB::foo()!! : 如果我寫 : const string s("hello"); 效率 或是 差別在哪? 答案是沒差.. 當然如果你像上面一樣有多型的需求 多型呼叫本身就比一般呼叫還要花成本 : 我只知道ref可以減少一次copy 但是建構還是需要 : 所以跟直接初始物件 : 感覺這兩者沒有差別?????請強者解惑 : : string& foo(){ : : return string("hello"); : : // string("hello") 暫時物件在離開 foo() 後就會解構。 : : } : : string& s = foo(); // s 指向垃圾 : 這邊想請教各位是 : 我實際去測試一下 如果foo的return type是回傳copy : 也就是少加了& 他就不會馬上跳出foo就將他解構 string s = foo(); 其實沒有產生一個temp object string s(); s = foo(); 這樣就會產生一個temp object (foo()的回傳值) : 這和上面講的const string& s = string("hello"); : 是同樣道理嘛??? 不是 : 最後就是~常常看到很多code很喜歡直接寫 : return 暫時物件; 這和我先寫 物件 temp(初始); return temp; : 這哪種是好習慣?? 效率上我也是覺得沒有差@@ 有差 在沒有NRV的compiler上前者比較快 : 謝謝 關於這兩個問題的詳細回答 因為好長我懶得打 自己去看inside the C++ object model section 2.3 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.13.219 ※ 編輯: holymars 來自: 114.32.13.219 (09/16 22:27)

09/17 14:00, , 1F
謝謝 你提的動態多型 如果是物件一定要這樣初始化嘛@@?
09/17 14:00, 1F

09/17 14:03, , 2F
AAA& fake_a(BBB());寫這樣 連暫時物件也不建構耶@@好怪喔
09/17 14:03, 2F

09/17 15:19, , 3F
reference要初始化要透過 =吧 你寫AAA& fake_a();
09/17 15:19, 3F

09/17 15:19, , 4F
compiler應該不會理你這行code吧.
09/17 15:19, 4F

09/17 17:59, , 5F
就算不加上&他還是不會建構BBB()耶
09/17 17:59, 5F
文章代碼(AID): #1AiFHAmU (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AiFHAmU (C_and_CPP)