我正在处理=
的运算符重载,并看到了以下示例。
class Ratio {
public:
Ratio(int , int );
Ratio(const Ratio&);
Ratio& operator= (const Ratio&);
private:
int nNum, nDenum;
};
Ratio::Ratio(int n = 0, int d = 1) {
nNum = n;
nDenum = d;
}
Ratio::Ratio(const Ratio &T) {
nNum = T.nNum;
nDenum = T.nDenum;
}
Ratio& Ratio::operator= (const Ratio& R) {
nNum = R.nNum;
nDenum = R.nDenum;
return *this;
}
int main() {
Ratio r1;
Ratio r2(2,3);
r1 = r2;//STATEMENT 1
}
此代码运行良好,但我想知道原因?由于函数operator=
返回对Ratio对象的引用,但在STATEMENT 1中,我们没有在任何Ratio对象中获取返回引用。
答案 0 :(得分:5)
什么都没发生。 operator=
返回引用仅用于将它们链接在一起的用法。如:
r1 = r2 = r3;
并且赋值是右关联的,因此上面的赋值链解析如下:
r1 = (r2 = r3);
无论如何,这只是一个约定,但后面是所有内置类型以及标准库中的所有类型。