2009-10-22 64 views
6

问题很简单... 在使用this-> yourvariable或yourvariable时出于某种原因有任何区别吗?类内的“this”指针

我没有发现任何问题,但我正在使用这个 - >很多,并希望知道是否有任何区别之后再继续。

我在这里看到了一篇文章的评论,我不记得是哪个主题,但是这个人说了关于使用关键词“this”的一些信息。

个人而言,我觉得直接使用变量比变量更好。它使代码更加简单和漂亮。

Joe

+2

请参阅:http://stackoverflow.com/questions/993352/when-should-i-make-explicit-use-of-the-this-pointer – 2009-10-22 21:49:06

+0

大多数编码指南我读过,没有很好的理由就皱眉了。这是代码噪声,增加了没有意义。任何阅读代码的人都应该能够从上下文中推断出您正在使用类成员。 – dss539 2009-10-22 21:49:07

+0

使用'this'明确地使程序更具可读性 – Xinus 2009-12-13 09:24:06

回答

12

不,没有真正的区别,它只是一个范围限定符。但是,假设有一种方法

void SetFoo(Foo foo) 
{ 
    this->foo = foo; 
} 

其中this-> foo是私人成员。在这里,它允许您使用与类/实例变量同名的参数。

0

这是一种关于C#here的问及答案,我认为答案(至少是我的)是相同的。这是首选。

1

我发现使用this使我的代码更具可读性,但没有理由必须这样做。如果你看看你的编译器生成的汇编代码,它应该在功能上(通常字面上)是相同的。

基本上,当函数被调用时,会传递一个隐含的参数this,然后用它来确定哪些变量是在哪里。如果你直接使用变量,没有this->,除了使用一些语法糖,你什么都不做。

16

在大多数情况下,没有区别。但也有它的确与众不同情况:

class foo 
{ 
    int i; 
    void bar() { 
     int i = 3; 
     i; // refers to local i 
     this->i; // refers to the member i 
    } 
}; 

此外,与模板,你可能需要有资格的成员与this->,使名称查找延迟:

template<typename T> 
struct A 
{ 
    int i; 
    T* p; 
}; 

template<typename T> 
struct B : A<T> 
{ 
    void foo() { 
     int k = this->i; // here this-> is required 
    } 
}; 

一个编译器,适当做的如果你删除“this->”它不知道我应该是什么,那么“两阶段查找”会投诉。 “this->”告诉它它是基类中的成员。由于基类依赖于模板参数,因此查找会延迟到实例化类模板。

+0

+1来表示模板问题。海湾合作委员会通常说'沿线的东西不依赖于模板参数,所以定义必须可用'。 – 2009-10-23 10:26:24