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

在构造函数中:

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 + +铝

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

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;
}

其他回答

“这。'帮助查找'this'类中有很多成员的成员(通常是由于深度继承链)。

按CTRL+空格键并没有帮助,因为它还包括类型;而这。’只包括会员。

一旦我得到我想要的东西,我通常会删除它:但这只是我风格的突破。

在风格方面,如果你是一个独行侠——你决定;如果你在一家公司工作,坚持公司的政策(看看源代码控制中的东西,看看其他人在做什么)。就用它来评定成员资格而言,既不正确也不错误。唯一错误的就是前后矛盾——这是风格的黄金法则。别挑剔别人。把时间花在思考真正的编码问题上——当然还有编码。

我使用它的时候,在一个函数中,接受了对同一类型对象的引用,我想完全清楚我引用的是哪个对象,在哪里。

例如

class AABB
{
  // ... members
  bool intersects( AABB other )
  {
    return other.left() < this->right() &&
           this->left() < other.right() &&

           // +y increases going down
           other.top() < this->bottom() &&
           this->top() < other.bottom() ;
  }
} ;

(vs)

class AABB
{
  bool intersects( AABB other )
  {
    return other.left() < right() &&
           left() < other.right() &&

           // +y increases going down
           other.top() < bottom() &&
           top() < other.bottom() ;
  }
} ;

AABB的right()指的是哪一个?这增加了一点澄清。

就我个人而言,我在引用成员变量时总是尝试使用这个。它有助于澄清代码并使其更具可读性。即使没有歧义,第一次阅读我的代码的人也不知道这一点,但如果他们看到始终使用这个,他们就会知道他们是否在查看成员变量。

这在c++编译器上

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

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

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

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

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

这就是我使用它的原因。

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

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

我一有机会就用。我相信这会使代码更有可读性,而更有可读性的代码就等于更少的bug和更强的可维护性。