gpt4 book ai didi

c++ - 运算符重载中的 const 返回类型

转载 作者:太空狗 更新时间:2023-10-29 20:13:19 25 4
gpt4 key购买 nike

const Byte operator/(const Byte& right) const {
require(right.b != 0, "divide by zero");
return Byte(b / right.b);
}

我读到如果运算符的作用是产生一个新的值,你将需要产生一个新的对象作为返回值。例如,Integer::operator+ 必须生成一个 Integer 对象,它是操作数的总和。此对象作为 const 按值返回,因此不能将结果修改为左值

如果我们不把它写成 const 会怎么样?任何带有解释的示例都会有所帮助。

另外为什么我们在函数原型(prototype)中有第二个const

最佳答案

Any example with explanation would be helpful.

这是过时的建议,旨在使运算符的行为有点像内置运算符,这样像 (a/b) = c 这样的废话将无法编译。

但是,从 C++11 开始,它还抑制了移动语义,这会影响效率;所以你不应该返回一个 const 值。

Also why do we have second const in function prototype?

参数是一个const引用,成员函数是const,为了(a)确保运算符不修改任何一个操作数; (b) 允许使用常量或临时操作数调用它。

详细说明 (b),如果没有这些 const 限定符,您将无法使用常量操作数:

const Byte a, b;
a / b; // ERROR: operands can't be const

或临时值:

Byte f();
f() / f(); // ERROR: operands can't be temporary

关于c++ - 运算符重载中的 const 返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22358899/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com