看板 C_and_CPP 關於我們 聯絡資訊
各位好, 出自C++ primer 5th,簡中版 6.3.2 (第202頁) "返回引用的函式得到左值,其他返回類型得到右值" 我對於其他返回類型得到右值有點疑問 以下我寫了一小段: #include <iostream> using namespace std; struct a{ int i; }; a f(a &temp) { return temp; } int main() { a aa,bb; aa.i=1; bb.i=3; f(aa)=bb; //如果返回值是右值為何可以賦值? return 0; } 書中講的"其他類型"是指非class或struct(自定義類型)? 請問書中這句話是否有瑕疵? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.225.54.49 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1399298983.A.E0A.html
soheadsome:應該說他的右值還是個位址 只是是區域變數的 05/05 23:08
soheadsome:你可以試著在f(aa)=bb;後面印出aa.i 他本身沒變 05/05 23:09
kattte:大寫E 可以修改內文 05/06 00:12
AstralBrain:f(aa)=bb的等號不是賦值 05/06 00:17
AstralBrain:是呼叫member function a::operator= 05/06 00:18
soheadsome:對吼 c++會預設幫你加copy assignment 05/06 00:19
AstralBrain:所以是ok的, 和"rvalue不能賦值"這句話沒有衝突 05/06 00:19
purpose:現在像MSDN,都不用"可以放等號左邊就是左值"這種解釋了 05/06 00:54
purpose:很多左值,被加了const後,也一樣不能放左邊 05/06 00:54
damody:你可以大E修文 寫信請版主刪文吧 05/06 01:18
Feis:那什麼叫做左值呢? 簡答題 05/06 03:18
purpose:有名稱有明確位址可以做&取址,可以靠自己存在超過一expr. 05/06 10:07
purpose:右值相反,但可用 const int &i = 1+2; 來延長存在時間 05/06 10:09
firose:可以用 && 接看看是否為右值 05/06 12:38
Feis:用 && 接的時候要小心 template 的陷阱 05/06 12:57