const返回类型在运算符重载中

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功能原型?

Mik*_*our 8

任何有解释的例子都会有所帮助.

这是过时的建议,旨在使操作员的行为有点像内置的操作符,以便无意义的(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)