gpt4 book ai didi

c++ - 谁在 + 运算符中删除了复制的实例? (c++)

转载 作者:IT王子 更新时间:2023-10-28 23:33:49 26 4
gpt4 key购买 nike

我在整个互联网上搜索了如何正确实现 + 运算符,我找到的所有结果都执行以下步骤:

const MyClass MyClass::operator+(const MyClass &other) const
{
MyClass result = *this; // Make a copy of myself. Same as MyClass result(*this);
result += other; // Use += to add other to the copy.
return result; // All done!
}

我对这个“过程”有几个问题:

  1. 以这种方式实现 + 运算符不是很愚蠢,它在第一行调用赋值运算符(复制类),然后在返回中调用复制构造函数(它也复制类,由于返回值是按值返回的事实,因此它会破坏第一个拷贝并创建一个新拷贝。坦率地说,这不是很聪明...)

  2. 当我写 a=b+c 时,b+c 部分会创建一个类的新拷贝,然后 'a=' 部分将拷贝复制给自己。谁删除了 b+c 创建的拷贝?

  3. 有没有更好的方法来实现 + 运算符而无需两次应对类,也没有任何内存问题?

提前致谢

最佳答案

  1. 这实际上不是赋值运算符,而是复制构造函数。毕竟,像加法这样的操作会创建一个新值,所以它必须在某个地方创建。这比看起来更有效,因为编译器可以自由地进行返回值优化,这意味着它可以直接在下次使用的地方构造值。

  2. result 被声明为局部变量,因此与函数调用一起消失 - 除非使用 RVO(见上文),在这种情况下,它实际上从未在函数,但在调用者中。

  3. 不是真的;这种方法比最初看起来要高效得多。

关于c++ - 谁在 + 运算符中删除了复制的实例? (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2866048/

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