据我了解,重载operator=时,返回值应该是非常量引用。
A& A::operator=( const A& )
{
// check for self-assignment, do assignment
return *this;
}
在以下情况下允许调用非常量成员函数是非常量的:
( a = b ).f();
但为什么它应该返回一个引用呢?如果返回值未声明为引用(假设按值返回),在什么情况下会出现问题?
假设复制构造函数已正确实现。
不返回引用是一种资源浪费,并且会产生奇怪的设计。为什么要为运营商的所有用户创建一个副本,即使几乎所有用户都会丢弃该值?
a = b; // huh, why does this create an unnecessary copy?
此外,这会让你的班级的用户感到惊讶,因为内置的赋值运算符不会同样复制
int &a = (some_int = 0); // works
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)