有人能解释C++中的“这个”操作符吗?

有人能解释C++中的“这个”操作符吗?,c++,C++,我知道这个操作符是用来访问调用对象的成员函数的,但是它们也可以正常调用。那么,这个操作符到底有什么用呢> Pc>在C++中没有操作符调用,在所有非静态成员函数中都存在隐式变量。其中,这是指向类的当前实例的指针 这也是语言中的一个关键字,换句话说,是一个保留字,不能将其用作变量或函数的名称 这可用于引用对象 例如 在上述情况下,它是多余的,但在某些情况下它是有用的或必需的。首先,这不是运算符are+、-,等等。它是一个保留关键字,也是一个表达式 这在成员函数中用于引用调用函数的对象。您是对的,它不

我知道这个操作符是用来访问调用对象的成员函数的,但是它们也可以正常调用。那么,这个操作符到底有什么用呢

> Pc>在C++中没有操作符调用,在所有非静态成员函数中都存在隐式变量。其中,这是指向类的当前实例的指针

这也是语言中的一个关键字,换句话说,是一个保留字,不能将其用作变量或函数的名称

这可用于引用对象

例如

在上述情况下,它是多余的,但在某些情况下它是有用的或必需的。

首先,这不是运算符are+、-,等等。它是一个保留关键字,也是一个表达式

这在成员函数中用于引用调用函数的对象。您是对的,它不需要引用成员变量或成员函数,但如果您希望引用整个对象,它会很有用。

根据MSDN:

this pointer not运算符是只能在类、结构或联合类型的非静态成员函数中访问的指针。它指向为其调用成员函数的对象。静态成员函数没有this指针

如果你想做这样的作业,你可以使用它:

myClass::myClass(int x) {
     myGlobalVar = this;
     this-> x = x;
}

“this”是指向对象实例的指针

请考虑以下场景,其中可以使用此选项查看一个好处:

int add(int a, int b){
   return a + b;
}
但假设您还有一个名为“b”的数据成员

return a + b
返回参数的总和

return a + this->b

返回参数a和数据成员b的和

我不认为这是个糟糕的问题。他不是在问这有什么作用,而是为什么这个关键词在大多数情况下都是隐含的

在这种情况下,此指针是必需的

class Test
{
    int i;

    void Set(int i)
    {
        this->i = i;
    }
};
用于在成员变量和同名函数参数之间进行选择

当您需要类中对象的地址时,也可以使用此选项

void f(Test *p);

class Test
{
    int i;

    void pass()
    {
        f(this);
    }
};

从形式上讲,这是一个关键词。不回答问题question@JohnDibling当前位置我现在扩展了我的答案。更好的是,我会回复。谢谢。什么废话,为什么我不能还原我的否决票?有时你必须使用它。我想知道为什么有人否决了它。@John:你指的是从属名称吗?@BenVoigt:我指的是访问基类模板中的非静态成员函数。@John:换句话说,是的,您指的是从属名称,可能是函数或数据成员。与这个问题相比,这个主题非常高级,ISTR使用这个只是解决这些问题的几种可能方法之一,因此单词“必须”有点太强。您的第二个示例更好,在第一个示例中,您可以限定名称Test::i,与任何隐藏场景一样。+1:将其作为函数参数传递显然是日常使用。很明显,我甚至没有想到它。试着读一下这篇文章,它准确地解释了这是什么,什么时候需要它。他想知道什么时候需要这个关键词,而不是它的意思。投票结束没有一个基本的理解是不公平的。我的理解是,海报基本上是问你什么时候必须使用这个指针,这个问题有答案。此外,大多数C++程序员都无法回答这个问题。尽管如此,这个问题以前已经被问过很多次了,而且是个骗局。它应该作为一个被骗者关闭。在我看来,这个问题关闭的原因是错误的。但它应该被当作一个傻瓜关闭,所以我不会投票给repen。在任何情况下,如果您想知道何时必须使用this指针,下面是我将链接到的dupe:名称隐藏问题的更好解决方案是为您的成员和参数选择合理的名称。
void f(Test *p);

class Test
{
    int i;

    void pass()
    {
        f(this);
    }
};