我很好奇其他人是如何使用这个关键字的。我倾向于在构造函数中使用它,但我也可能在整个类的其他方法中使用它。一些例子:

在构造函数中:

public Light(Vector v)
{
    this.dir = new Vector(v);
}

在其他地方

public void SomeMethod()
{
    Vector vec = new Vector();
    double d = (vec * vec) - (this.radius * this.radius);
}

当前回答

每当我引用一个实例变量时,我都会使用它,即使我不需要。我认为这让代码更清晰。

其他回答

每当我引用一个实例变量时,我都会使用它,即使我不需要。我认为这让代码更清晰。

我用它来调用智能感知就像JohnMcG,但我会回去擦除“this->”当我完成。我遵循微软的惯例,在成员变量前加上“m_”,所以把它作为文档是多余的。

我在任何可能有歧义的地方都使用它(显然)。不只是编译器的模糊性(在这种情况下是必需的),还有查看代码的人的模糊性。

在Jakub Šturc的回答中,他关于在构造器之间传递数据的第5条可能需要一些解释。这是在重载构造函数中,并且是强制使用This的一种情况。在下面的例子中,我们可以使用默认形参从无参数构造函数调用参数化构造函数。

class MyClass {
    private int _x
    public MyClass() : this(5) {}
    public MyClass(int v) { _x = v;}
}

我发现有时候这是一个特别有用的功能。

这在c++编译器上

如果c++编译器没有立即找到一个符号,它会默默地查找。有时候,大多数时候,这是好的:

如果在子类中没有重载母类的方法,则使用母类的方法。 将一个类型的值提升为另一个类型

但有时候,你只是不想让编译器猜测。您希望编译器提取正确的符号,而不是其他符号。

对我来说,这些时候是在一个方法中,我想访问一个成员方法或成员变量。我只是不想因为我写了printf而不是print而随机抽取一些符号。这个->printf不会被编译。

关键是,对于C遗留库(§),多年前编写的遗留代码(§§),或者在复制/粘贴已经过时但仍然活跃的语言中可能发生的任何事情,有时,告诉编译器不要耍花招是一个好主意。

这就是我使用它的原因。

(§)这对我来说仍然是一个谜,但我现在想知道你在源代码中包含<windows.h>头的事实,是不是所有遗留的C库符号都会污染你的全局命名空间的原因

(§§)意识到“你需要包含一个头文件,但是包含这个头文件会破坏你的代码,因为它使用了一些具有通用名称的愚蠢宏”是程序员生活中的俄罗斯轮盘时刻之一