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

在构造函数中:

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

在其他地方

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

当前回答

黑C + +铝

我同意“非用不可”的说法。不必要地用它修饰代码并不是一个好主意,因为当你忘记这样做时,编译器不会警告你。这可能会给那些期待它一直在那里的人带来困惑,也就是说,他们必须考虑它。

那么,你什么时候会使用它呢?我只是看了一些随机的代码,并找到了这些例子(我不判断这些是好事还是坏事):

将“yourself”传递给一个函数。 将“你自己”分配给一个指针或类似的东西。 铸造,即上/下铸造(安全或其他),铸造constness等。 编译器强制消歧。

其他回答

this关键字的另一个很少使用的情况是,当您需要从实现类中调用显式接口实现时。这里有一个人为的例子:

class Example : ICloneable
{
    private void CallClone()
    {
        object clone = ((ICloneable)this).Clone();
    }

    object ICloneable.Clone()
    {
        throw new NotImplementedException();
    }
}

你应该经常使用它,我用它来区分私有字段和参数(因为我们的命名约定声明我们不为成员和参数名使用前缀(并且它们是基于在互联网上找到的信息,所以我认为这是一个最佳实践))

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

我只在需要的时候使用它,除了对称操作,由于单参数多态性不得不把它放在一边的方法中:

boolean sameValue (SomeNum other) {
   return this.importantValue == other.importantValue;
} 

黑C + +铝

它被用在赋值操作符中,大多数时候你必须检查和防止奇怪的(无意的,危险的,或只是浪费程序时间的)事情,比如:

A a;
a = a;

你的赋值操作符将被写成:

A& A::operator=(const A& a) {
    if (this == &a) return *this;

    // we know both sides of the = operator are different, do something...

    return *this;
}