2015-07-12 58 views
1

正是本之间的差:以及这 - >构件VS构件在C++

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

此:

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

在C++?

+0

不少现有的帖子。 http://stackoverflow.com/questions/6779645/use-of-this-keyword-in-c – DaveyLaser

+3

六个字符。 –

+0

我不知道要在搜索和自动标题搜索中放什么,谷歌也没有给出任何好的结果 – Accumulator

回答

2

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

第二个例子没有。

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

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 
    } 
}; 
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也可能是它的一个可检查的变量。