this-> C ++中的成员VS成员

时间:2015-07-12 22:31:30

标签: c++ pointers this member members

这有什么区别:

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

和此:

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

在C ++中?

3 个答案:

答案 0 :(得分:2)

第一个示例限制了名称“id”被查找到MyClass类成员的范围。

第二个例子没有。

如果,例如MyClass没有成员“id”,或者当前方法有一个具有相同名称的局部变量或参数。

答案 1 :(得分:1)

这取决于具体情况。例子:

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
    }
};

答案 2 :(得分:0)

假设您的类有一个名为id的成员变量,则没有区别。即使您有一个全局id变量,成员变量也始终优先。

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

在某些情况下你绝对需要它。

一个例子是你想要一个函数将指针/引用(*)返回给对象本身:

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

其他是你想把它作为参数传递给函数

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

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

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