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

作者: kkkmode (kkk)   2014-05-05 22:09:41
各位好,
出自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(自定義類型)?
請問書中這句話是否有瑕疵?
謝謝
作者: soheadsome (師大狗鼻哥)   2014-05-05 23:08:00
應該說他的右值還是個位址 只是是區域變數的你可以試著在f(aa)=bb;後面印出aa.i 他本身沒變
作者: kattte (誠實面對自己吧!)   2014-05-06 00:12:00
大寫E 可以修改內文
作者: AstralBrain   2014-05-06 00:17:00
f(aa)=bb的等號不是賦值是呼叫member function a::operator=
作者: soheadsome (師大狗鼻哥)   2014-05-06 00:19:00
對吼 c++會預設幫你加copy assignment
作者: AstralBrain   2014-05-06 00:19:00
所以是ok的, 和"rvalue不能賦值"這句話沒有衝突
作者: purpose (秀才遇到肥宅兵)   2014-05-06 00:54:00
現在像MSDN,都不用"可以放等號左邊就是左值"這種解釋了很多左值,被加了const後,也一樣不能放左邊
作者: damody (天亮damody)   2014-05-06 01:18:00
你可以大E修文 寫信請版主刪文吧
作者: Feis (永遠睡不著 @@)   2014-05-06 03:18:00
那什麼叫做左值呢? 簡答題
作者: purpose (秀才遇到肥宅兵)   2014-05-06 10:07:00
有名稱有明確位址可以做&取址,可以靠自己存在超過一expr.右值相反,但可用 const int &i = 1+2; 來延長存在時間
作者: firose (guest也是也是也是也是也)   2014-05-06 12:38:00
可以用 && 接看看是否為右值
作者: Feis (永遠睡不著 @@)   2014-05-06 12:57:00
用 && 接的時候要小心 template 的陷阱

Links booklink

Contact Us: admin [ a t ] ucptt.com