【发布时间】:2011-06-10 01:15:27
【问题描述】:
我正在读一本关于 C++ 的书,更准确地说是关于运算符重载的书。
示例如下:
const Array &Array::operator=(const Array &right)
{
// check self-assignment
// if not self- assignment do the copying
return *this; //enables x=y=z
}
书中提供的关于返回 const ref 而不是 ref 的解释是为了避免像 (x=y)=z 这样的赋值。我不明白我们为什么要避免这种情况。我知道在此示例中首先评估 x=y ,并且由于它返回一个 const 引用,因此 =z 部分无法执行。但为什么呢?
【问题讨论】:
-
哪本书?这对我来说似乎是不必要的预防措施。我无法想象有人写
(x=y)=z——他们为什么要写?如果没有括号,x=y=z将被解析为x=(y=z),这非常合理,因此没有风险。 -
但是为什么呢?为什么它是一个常量引用?为什么按这个顺序执行?为什么不能将
z分配给 (x=y)? -
@antronis:获得更好的 C++ 书籍。
-
这是deitel c++如何编程第7版
-
我同意这不是你通常会写的东西,但如果你的意思是
(x = y) == z并且打错了怎么办?我也不赞同那个特定的表达式,但是做更多的事情 const 有助于将运行时错误转化为编译时错误,这通常是有帮助的。
标签: c++ operator-overloading assignment-operator