6

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

我没有发现任何问题,但我经常使用这个-> 并且想知道在继续之前是否有任何区别。

我在这里看到了一篇帖子的评论,我不记得是哪个帖子了,但是那个人说了一些关于使用关键字“this”的事情。

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

4

4 回答 4

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->" 告诉它它是基类的成员。由于基类依赖于模板参数,查找会延迟到类模板被实例化。

于 2009-10-22T21:52:04.690 回答
12

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

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

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

于 2009-10-22T21:47:05.577 回答
1

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

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

于 2009-10-22T21:51:10.563 回答
0

这是关于 C#的一种询问和回答,我认为答案(至少我的)是相同的。这是偏好。

于 2009-10-22T21:47:55.070 回答