[討論] 關於函式的返回值

看板C_and_CPP作者 (kkk)時間11年前 (2014/05/05 22:09), 編輯推噓5(5010)
留言15則, 7人參與, 最新討論串1/1
各位好, 出自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

05/05 23:08, , 1F
應該說他的右值還是個位址 只是是區域變數的
05/05 23:08, 1F

05/05 23:09, , 2F
你可以試著在f(aa)=bb;後面印出aa.i 他本身沒變
05/05 23:09, 2F

05/06 00:12, , 3F
大寫E 可以修改內文
05/06 00:12, 3F

05/06 00:17, , 4F
f(aa)=bb的等號不是賦值
05/06 00:17, 4F

05/06 00:18, , 5F
是呼叫member function a::operator=
05/06 00:18, 5F

05/06 00:19, , 6F
對吼 c++會預設幫你加copy assignment
05/06 00:19, 6F

05/06 00:19, , 7F
所以是ok的, 和"rvalue不能賦值"這句話沒有衝突
05/06 00:19, 7F

05/06 00:54, , 8F
現在像MSDN,都不用"可以放等號左邊就是左值"這種解釋了
05/06 00:54, 8F

05/06 00:54, , 9F
很多左值,被加了const後,也一樣不能放左邊
05/06 00:54, 9F

05/06 01:18, , 10F
你可以大E修文 寫信請版主刪文吧
05/06 01:18, 10F

05/06 03:18, , 11F
那什麼叫做左值呢? 簡答題
05/06 03:18, 11F

05/06 10:07, , 12F
有名稱有明確位址可以做&取址,可以靠自己存在超過一expr.
05/06 10:07, 12F

05/06 10:09, , 13F
右值相反,但可用 const int &i = 1+2; 來延長存在時間
05/06 10:09, 13F

05/06 12:38, , 14F
可以用 && 接看看是否為右值
05/06 12:38, 14F

05/06 12:57, , 15F
用 && 接的時候要小心 template 的陷阱
05/06 12:57, 15F
文章代碼(AID): #1JPvkduA (C_and_CPP)