C++中的this->member VS member

this->member VS member in C++

这有什么区别:

int MyClass::getId() {
    return this->id;
}

还有这个:

int MyClass::getId() {
    return id;
}

在 C++ 中?

第一个示例将查找名称 "id" 的范围限制为 class MyClass 的成员。

第二个例子没有。

这会有所不同,例如MyClass 没有成员 "id",或者如果当前方法有同名的局部变量或参数。

这取决于上下文。示例:

template <typename> struct X { int a; };

int b;

template <typename T> struct Foo : X<T> {
    int f() {
        return this->a;    // OK
        // return a;       // Error
    }

    int g() {
        // return this->b; // Error
        return b;          // OK
    }
};

假设你的class有一个名为id的成员变量,没有区别。即使你有一个全局id变量,成员变量总是优先的。

你的下一个问题是: 那么为什么存在 this 关键字呢?

有些情况下您绝对需要它。

一个例子是您想要一个函数将 pointer/reference(*) 返回给对象本身:

return *this;    //reference
return this;     //pointer

另一种是你想将它作为参数传递给函数

some_function(*this);    //reference(&) or value, depends on some_function signature
some_function(this);     //pointer

它也可以用在this->id中,只是为了易读性,只是为了让下一个阅读代码的人立即知道id是class的组成部分而不是全局的,没有功能优势.

如果您使用调试器,this 也可能是它可以检查的变量。