Re: [問題] reference 問題
※ 引述《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
09/17 14:03, 2F
→
09/17 15:19, , 3F
09/17 15:19, 3F
→
09/17 15:19, , 4F
09/17 15:19, 4F
推
09/17 17:59, , 5F
09/17 17:59, 5F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章