gpt4 book ai didi

c++ - C++ 运算符重载返回中的常量正确性

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:01 27 4
gpt4 key购买 nike

我有点困惑为什么我被告知要从 C++ 中的二元运算符返回 const foo 而不是 foo。

我一直在阅读 Bruce Eckel 的“Thinking in C++”,在关于运算符重载的章节中,他说“通过使 [重载二元运算符的] 返回值成为常量,您声明只有一个常量可以为该返回值调用成员函数。这是 const 正确的,因为它可以防止您将潜在有值(value)的信息存储在最有可能丢失的对象中。

但是,如果我有一个返回 const 的加号运算符和一个前缀增量运算符,则此代码无效:

class Integer{
int i;

public:
Integer(int ii): i(ii){ }
Integer(Integer&);

const Integer operator+();
Integer operator++();
};


int main(){

Integer a(0);
Integer b(1);

Integer c( ++(a + b));
}

要允许这种赋值,让 + 运算符返回一个非常量值不是很有意义吗?这可以通过添加 const_casts 来完成,但这会变得非常笨重,不是吗?

谢谢!

最佳答案

当你说++x 时,你是在说“将 1 加到 x,将结果存回 x,然后告诉我它是什么”。这是预增量运算符。但是,在++(a+b) 中,您应该如何“将结果存储回 a+b”?

当然,您可以将结果存储回当前保存 a+b 结果的临时文件中,该结果很快就会消失。但是,如果您真的不关心结果存储在哪里,为什么要递增它而不是只加一个?

关于c++ - C++ 运算符重载返回中的常量正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1815903/

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