gpt4 book ai didi

c++ - 重载赋值运算符 : if we return (*this),,它是指针/地址处的值,赋值运算符的正确语法是什么?

转载 作者:行者123 更新时间:2023-11-28 07:54:24 27 4
gpt4 key购买 nike

以这两个前面的线程为例

第一个线程: Why does overloaded assignment operator return reference to class?

第二个线程: Why must the copy assignment operator return a reference/const reference?

重载赋值运算符的返回类型是类还是类的引用?我都看到了:

Point& Point::operator = (const Point& sourcePoint)
{
// As in the first thread I pasted above
return *this;
}

Point Point::operator = (const Point& sourcePoint)
{
// As in the second thread I pasted above
return *this;
}

哪个是对的?

同样,有什么区别:

int exFunction()
{
int i = 5;
int* iPtr = &i;
return *iPtr;
}

对比:

int& exFunction2()
{
int j = 5;
int* jPtr = &j;
return *jPtr;
}

谢谢!

最佳答案

这两个东西一点也不“相似”。

首先,赋值运算符。它们应该返回对对象本身的引用,以便您可以在链中使用它们:

Foo x, y, z;

x = y = z; // makes y equal to z and returns a reference to self,
// which is assigned to x

所以它总是:

Foo & operator=(Foo const &) { /* ... */  return this; }  // copy-assignment

Foo & operator=(/* any other signature */) { /* ... */ return this; }

现在,第二个问题:您的 exFunction2 完全错误且损坏。它具有未定义的行为,因为它返回对局部变量的引用,该引用在函数返回时超出范围。 (它本质上说 return j;;记住解引用的结果是一个左值。)编写该函数的唯一明智的方法是像 exFunction,它可以被缩短到 int exFunction() { return 5;

这里是 a related question关于这个话题。

关于c++ - 重载赋值运算符 : if we return (*this),,它是指针/地址处的值,赋值运算符的正确语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13077158/

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