关于const的函数引用传递,请赐教,该如何解决

关于const的函数引用传递,请赐教
函数返回值采用“引用传递”的场合并不多,这种方式一般只出现在类的赋值函数中,目的是为了实现链式表达。
例如:
class A
{
A & operate = (const A &other); // 赋值函数(请问这里实现什么?)
};
A a, b, c; // a, b, c 为A 的对象

a = b = c; // 正常的链式赋值
(a = b) = c; // 不正常的链式赋值,但合法(这两个赋值有什么问题?)[u][/u]
如果将赋值函数的返回值加const 修饰,那么该返回值的内容不允许被改动。上例中,语句 a = b = c 仍然正确,但是语句 (a = b) = c 则是非法的。

------解决方案--------------------
(a = b) = c 则是非法的。

是因为a=b是赋值,而后者,就是给const变量赋值了,违背定义了
------解决方案--------------------
探讨
(a = b) = c 则是非法的。

是因为a=b是赋值,而后者,就是给const变量赋值了,违背定义了

------解决方案--------------------
探讨
函数返回值采用“引用传递”的场合并不多,这种方式一般只出现在类的赋值函数中,目的是为了实现链式表达。
例如:
class A
{
A & operate = (const A &other); // 赋值函数(请问这里实现什么?)
};
A a, b, c; // a, b, c 为A 的对象

a = b = c; // 正常的链式赋值

------解决方案--------------------
这两个赋值有什么问题?

答案: 你试试,去了引用,那么会报错的, 没引用(a=b)=c,肯定出错。。

楼主试试



探讨
函数返回值采用“引用传递”的场合并不多,这种方式一般只出现在类的赋值函数中,目的是为了实现链式表达。
例如:
class A
{
A & operate = (const A &other); // 赋值函数(请问这里实现什么?)
};
A a, b, c; // a, b, c 为A 的对象

a = b = c; // 正常的链式赋值
(a = b) = c;……

------解决方案--------------------
a = b = c相当于a = (b = c),b = c返回一个右值,把右值赋给a没有问题。但是(a = b) = c的话,a = b返回一个右值,赋值给右值是不合法的。
------解决方案--------------------
[Cpp.程序设计原理与实践].(机械工业出版社)有深刻的将这个问题,当初我看了豁然开朗,只是现在又忘记了。。。
另外,如果lz没看过这本书的话,建议看看,里面很多东东将的很精彩
------解决方案--------------------
A & operate = (const A &other); // 赋值函数(请问这里实现什么?)
这里是等号操作符,你可以把它看成是一个函数 即, A=B可以看成 A.f(B),返回值是用于链式赋值
例如 A=B=C可以看做 先 B.f(C) 假设返回的引用是D,接下来就是 A.f(D)
(A=B)=C 则是先A.f(B)然后再跟C结合
如果返回值加了const, A=B=C是没问题的
但是(A=B)=C 假设A.f(B)返回D, D是const的 即不能被修改, 但是下一步却是 D.f(C)要用C来赋值给D,是不可以的
------解决方案--------------------
class A
{
A & operate = (const A &other); // 赋值函数(请问这里实现什么?)
};
A a, b, c; // a, b, c 为A 的对象

a = b = c; // 正常的链式赋值
(a = b) = c; // 不正常的链式赋值,但合法(这两个赋值有什么问题?)[u][/u]
你们用的什么编译器啊!上面的示例visual c++编译出现N个错误!operate是什么意思,说能解释一下程序吗?Thank you very much!新手求解
------解决方案--------------------
不知道大家怎么分析的;
根本没任何问题;
gcc 4.2表示代码没有问题;

返回值加const的话,(a = b) = c; 代码有问题是正常的,因为(a = b)返回的是一个const对象,用c来赋值有问题;


------解决方案--------------------
不是吧,const成员函数,返回值又是一个引用 很可能导致错误,比如:返回类的成员数据的时候,那么就会错误

改成:

cosnt成员函数,返回值是cosnt引用。


我猜测你说的是: 返回值是cosnt引用这种情况

 我根据你说的,也写了一个

class A
{
public:
A const & operator = (const A &other) const // 赋值函数(请问这里实现什么?)
{
return *this;
}
};

int main()
{
A a,b,c;
(a=b)=c;
return 0;
}

结果可以通过,,, 没报错




探讨

不知道大家怎么分析的;
根本没任何问题;
gcc 4.2表示代码没有问题;

返回值加const的话,(a = b) = c; 代码有问题是正常的,因为(a = b)返回的是一个const对象,用c来赋值有问题;