C++ 这是一个深入的过程

C++ 这是一个深入的过程,c++,operators,overloading,operator-keyword,C++,Operators,Overloading,Operator Keyword,有人能详细介绍一下*这和运算符重载中有关自赋值的常量吗 例: 我对我实际返回的内容感到困惑,我是否将我自己的一个未引用指针返回给我自己?这真的是自我分配的工作方式吗?我总是觉得还有一点,我知道这在前面的例子中已经解释过了,但我更关心的是为什么它会得到“const”并返回“*this” 另外,与明确表示a=other.a相比,如果我制作了常量值的实际副本,会有区别吗?这是效率更低还是应该如此首先复制常量,然后为副本的值赋值 如果我返回“this”,我会返回指向自己的指针吗?我对这个话题很困惑。 我

有人能详细介绍一下*这和运算符重载中有关自赋值的常量吗

例:

我对我实际返回的内容感到困惑,我是否将我自己的一个未引用指针返回给我自己?这真的是自我分配的工作方式吗?我总是觉得还有一点,我知道这在前面的例子中已经解释过了,但我更关心的是为什么它会得到“const”并返回“*this”

另外,与明确表示a=other.a相比,如果我制作了常量值的实际副本,会有区别吗?这是效率更低还是应该如此首先复制常量,然后为副本的值赋值


如果我返回“this”,我会返回指向自己的指针吗?我对这个话题很困惑。

我已经用C++工作了一段时间,希望我能正确地记住这些细节。p> 因为我是否将我自己的未引用指针返回给我自己?
是的,这是正确的。这是因为赋值函数返回一个引用(因此需要遵从this指针,以便函数可以返回对对象的引用)

这真的是自我分配的工作方式吗?

赋值运算符的参数(我更倾向于将其视为赋值函数)是常量,这是正确的,因为您不想更改传入的内容(避免副作用)

但是,您应该通过对照this指针检查传入的对象的地址来测试是否为自己分配了项。有关参考,请参阅。例如:

Class& Class::operator=(const Class& other)
{
  if ( this != &other ) 
  {
    a = other.a
    b = other.b
  }

  return *this;
}
如果我没记错的话,一个执行多个赋值的示例说明了赋值操作的工作原理。如果你有x,y,z,并且你做了以下事情, x=y=z

然后y被赋值为z,x被赋值为y,所以返回引用(赋值运算符要求输入)


希望有帮助。

编译了吗,因为如果你有
cosnt Object&Object
operator=没有意义,你所说的“我不会直接改变RHS”都是通过这个调用来帮助优化者的,那么=的含义取决于编程人员我所说的理论与实际代码。我希望有人能向我解释这些差异,并验证我的想法是否正确。
Class& Class::operator=(const Class& other)
{
  if ( this != &other ) 
  {
    a = other.a
    b = other.b
  }

  return *this;
}