c++中的这种声明是什么意思

What means that kind of declaration in c++?

本文关键字:声明 是什么 意思 c++      更新时间:2023-10-16
CSmth & CSmth::operator = (const CSmth & rhs)
{
    return *this;
}

这是一个赋值运算符,因此您可以编写:

CSmth a;
CSmth b;
a = b;

实际执行除了返回对第一个增编的参考之外,没有任何用处。更标准的实现方式是:

CSmth & CSmth::operator = (const CSmth & rhs) {
    if (this != &rhs) // protect against invalid self-assignment
    {
        do_whatever_required_to_copy_rsh_on_to_this;
    }
    return *this;
}

它是一个赋值运算符,用于将rhs对象的值赋值给当前(this(。然而,它还没有实施。

operator=是"复制指定运算符"。任何时候你看到

A a, b;
a = b;

在最简单的情况下,真正发生的是:

A & A::operator=(A const &rhs);
a.operator=(b);

对此进行分解:

  • operator=是a的成员。运算符可以访问调用运算符的对象中的所有变量,也就是左手边变量
  • operator=将对另一个a(赋值的右侧(的引用作为参数。良好的编码实践规定,您应该只从该函数中访问rhs的公共接口**
  • operator=返回对a的引用,按照惯例,这是指赋值的左侧,或*this。此返回很重要,因为它允许您将分配链接为:A a, b, c, d; a = b = c= d;

对operator=的调用应该将右侧对象的状态"复制"到左侧对象中。因为看起来我们在做一项任务,所以这被称为"复制任务操作员">

**将一个变量表示为"private"会使该变量对该类而不是对该对象是私有的。您可以从复制分配操作符中完全访问传递对象的私有实现,但这不是一个好主意,因为它违反了对象封装等。