关于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 = 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来赋值有问题;