一个类里面的“this”指针

时间:2009-10-22 21:44:11

标签: c++ pointers this

问题很简单...... 由于某种原因直接使用this-> yourvariable或yourvariable有什么不同吗?

我没有发现任何问题,但我正在使用这个 - >很多,并想知道在进一步发展之前是否存在任何差异。

我在这里看了一篇帖子的评论,我不记得哪个帖子,但该人说了一些关于使用关键词“this”的内容。

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

4 个答案:

答案 0 :(得分: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-&gt;”时进行投诉它不知道我应该是什么。 “这 - &gt;” 中告诉它它是基类的成员。由于基类依赖于模板参数,因此查找会延迟,直到实例化类模板。

答案 1 :(得分:12)

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

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

其中this-&gt; foo是私人会员。在这里,它允许您获取与类/实例变量同名的参数。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

这有点被问及并回答了C#here,我认为答案(至少是我的)是一样的。这是偏好。