[問題] class 沒辦法做連續的四則運算

作者: noodleT (麵T)   2014-09-27 17:26:17
class CVector3{
private:
double e[3];
public:
friend CVector3 operator *(CVector3 &a, double p); //向量*常數
friend CVector3 operator +(CVector3 &a, CVector3 &b);
double &operator[](int);//元素操作
};
double &CVector3::operator[](int index){
if (index < 3 && index >= 0){
return e[index];
}
else{
static double err = 0.0;
return err;
}
}
和此網站:
http://nknucc.nknu.edu.tw/~jwu/c/cpgch14.htm
的例7相比,我多了 &operator[] 的操作
目的是想要較方便的存取 e[0~2]
但卻造成我沒辦法做連續的向量運算,如:
CVector3 a1,a2,b(1,2,3),c(4,5,6);//建構時可寫入初始值,上面程式碼省略
a1=b+c; //這樣OK
a1=b*2.0; //OK
a2=b+c*2.0; //錯誤
a2=b+(c*2.0); //也是錯誤
想請教這裡錯誤的原因為何?
作者: carylorrk (carylorrk)   2014-09-27 18:13:00
rvalue 只能轉成 const lvalue ref 或 rvalue ref不能轉成 lvalue ref如果你的 operator 不會修改到參數,記得設 const
作者: firose (guest也是也是也是也是也)   2014-09-27 19:58:00
& 的語意是要綁定到一個變數,並把結果反映給 caller。但連續呼叫時,你傳值回來會產生暫存物件,這物件很快就消失了,不符合 & 蘊含的意義,所以 C++ 不允許這樣的行為。而 const & 蘊含不會修改參數的語意,所以才可以引用它。
作者: bibo9901 (function(){})()   2014-09-27 21:18:00
return a reference
作者: bluesoul (忙死你老爸)   2014-09-27 23:21:00
參數記得加上const

Links booklink

Contact Us: admin [ a t ] ucptt.com