为什么operator =返回引用而不是const引用

out*_*ind 5 c++

最初的问题与重载operator =有关,我喜欢分享我的发现,因为找到它们对我来说是非常重要的.我无法想象使用(a = b)作为左值的合理例子.在IRC和谷歌的帮助下,我发现了下一篇文章:http: //msdn.microsoft.com/en-us/magazine/cc301415.aspx

它提供了两个例子.

  (a=b)=c

  f(T& );
  f(a=b)
Run Code Online (Sandbox Code Playgroud)

但两者都不好,我相信这是不好的做法.第二个给我同样的感觉.你能提供更好的例子吗?为什么它应该是非常数的?

CB *_*ley 11

一个很好的理由是,在标准的一类的要求之一X是在标准容器可用的是,表达式a = b必须具有类型X&(其中,a是类型的左值Xb类型是一个rvalue X).

  • 但是为什么容器需要一个`X&`作为回报呢? (2认同)

Ara*_*raK 8

最有可能的原因是这就是语言的原生类型的工作原理.例如:

int x = 0, y = 1, z = 2;
(x = y) = z;
Run Code Online (Sandbox Code Playgroud)

AFAIK博士,Stroustrup博士说,语言的一致性是一件好事.即用户定义的类型应该像本机类型一样.

  • 除了C++行为实际上不同于C.从C99标准(6.5.16/3"赋值运算符"):"赋值表达式在赋值后具有左操作数的值,但不是左值." 知道Stroustrup的思考是什么,为什么这种变化是必要的,这将是很有趣的.我不能轻易想到一个好的,理想的用例(但这只是意味着某人需要告诉我或提醒我它是什么). (2认同)