gpt4 book ai didi

c++ - 赋值运算符在 C++ 中返回对 *this 的引用

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

我从“Effective c++”中了解到这一点,这是第 10 列。它说这是让赋值运算符返回对 *this 的引用的好方法。我写了一个代码片段来测试这个想法。我在这里覆盖了赋值运算符。并对其进行了测试。一切都好。但是当我删除那个操作符覆盖时,一切都是一样的。这意味着,链接分配仍然有效。那么,我错过了什么?这是为什么?需要你们的解释,谢谢。

#include <iostream>

using namespace std;

class Widget{
public:

Widget& operator=(int rhs)
{
return *this;
}
int value;

};

int main()
{
Widget mywidget;
mywidget.value = 1;
Widget mywidget2;
mywidget2.value = 2;
Widget mywidget3 ;
mywidget3.value = 3;
mywidget = mywidget2 = mywidget3;
cout << mywidget.value<<endl;
cout << mywidget2.value<<endl;
cout << mywidget3.value<<endl;

}

最佳答案

如果你完全删除operator=方法,编译器会创建一个默认的operator=,实现浅拷贝1和返回对 *this 的引用。

顺便说一句,当你写的时候

mywidget = mywidget2 = mywidget3;

您实际上是在调用此默认 operator=,因为您的重载运算符旨在与右侧的 int 一起使用。

链式赋值将停止工作,相反,如果您返回一个值、一个const 引用(=>您将得到编译错误)或对不同于*this(违反直觉的事情将开始发生)。

部分相关:copy and swap idiom ,即编写赋值运算符的完美方式。如果您需要编写 operator=

,强烈建议阅读
  1. 默认的 operator= 将执行就好像左侧操作数的每个成员和右侧操作数的每个成员之间存在赋值一样。这意味着对于原始类型,它将是一个“残酷的”按位复制,在 90% 的情况下,这对于指向自有资源的指针来说是不合适的。

关于c++ - 赋值运算符在 C++ 中返回对 *this 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5669813/

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