gpt4 book ai didi

c++ - 二元运算符+重载的返回值是否应该是 const 并且它会干扰优化吗?

转载 作者:行者123 更新时间:2023-11-28 03:32:27 25 4
gpt4 key购买 nike

给定示例代码:

class Integer
{
int i_;
public:
Integer(int i) : i_(i) {}
const Integer operator+(const Integer &arg) const { return Integer(i_ + arg.i_); }
};

我开始怀疑 operator+() 是否真的应该返回一个 const Integer。 “Thinking in C++”中的 Bruce Eckel 提供了类似情况下运算符重载的示例,并且似乎倾向于在返回类型上使用 const 修饰符。是否应该使用它,为什么?

另一方面,让我们尝试使用这个类:

int main()
{
Integer a(1), b(2);
Integer c = a + b;
}

当创建 c 作为 ab 的总和时,编译器很可能会执行复制省略并且 Integer::operator+() 将直接在 c(参见“Want speed? Pass by value”)占用的位置创建它的结果。但是当 Integer::operator+() 的返回类型声明为 const 时,由于目标是非常量,这不会强制编译器执行复制吗?

最佳答案

返回一个 Integer const 可以防止以下情况:

(a + b) = c;

我从来没有发现这是一个太大的问题,但禁止它确实使类型的行为更像内置类型。不应该对返回值优化有任何影响。

如果类的复制极其昂贵,可以做成支持右值引用有效,你可能想避免 const因为这些,但在实践中,我怀疑这样的类(class)很少见足以让您忽略它们。

关于c++ - 二元运算符+重载的返回值是否应该是 const 并且它会干扰优化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12095874/

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