deb*_*air 3 c++ const operator-overloading
const Byte operator/(const Byte& right) const {
require(right.b != 0, "divide by zero");
return Byte(b / right.b);
}
Run Code Online (Sandbox Code Playgroud)
我读到如果运算符的效果是产生一个新值,则需要生成一个新对象作为返回值.例如,Integer::operator+
必须生成一个Integer
操作数之和的对象.此对象由值返回为a const
,因此结果不能修改为左值.
如果我们不把它写成const
怎么办?任何有解释的例子都会有所帮助.
为什么我们还有第二个const
功能原型?
任何有解释的例子都会有所帮助.
这是过时的建议,旨在使操作员的行为有点像内置的操作符,以便无意义的(a / b) = c
编译.
但是,从C++ 11开始,它也会抑制移动语义,这会影响效率; 所以你不应该返回一个const
值.
为什么我们在函数原型中有第二个const?
参数是一个const
引用,成员函数是const
(a)确保运算符不修改任何操作数; (b)允许用恒定或临时操作数调用它.
详细说明(b),如果没有这些const
限定符,您将无法使用常量操作数:
const Byte a, b;
a / b; // ERROR: operands can't be const
Run Code Online (Sandbox Code Playgroud)
或临时值:
Byte f();
f() / f(); // ERROR: operands can't be temporary
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
829 次 |
最近记录: |