什么时候应该在C ++中使用“this”关键字?

时间:2010-02-25 20:53:19

标签: c++ coding-style

  

可能重复:
  Is excessive use of this in C++ a code smell

多年前,我养成了使用这个的习惯 - >访问成员变量时。我知道这不是绝对必要的,但我认为它更清楚。

然后,在某些时候,我开始更喜欢更简约的风格,并停止了这种做法......

最近我被一位更年轻的同龄人问到我是否认为这是一个好主意我发现我对自己的偏好没有真正的答案...这真的是一个完全风格的选择还是有真正的原因,为什么不加前缀这个>成员变量访问更好吗?

7 个答案:

答案 0 :(得分:37)

虽然这是一个完全主观的问题,但我认为一般的C ++社区更喜欢而不是拥有this->。它的混乱,完全不需要。

有些人用它来区分成员变量和参数。更常见的做法是在成员变量前加上一些内容,例如单个下划线或mm_等。

在我看来,这更容易阅读。如果您需要this->来区分变量,那么您做错了。更改参数名称(从xnewX)或具有成员变量命名约定。

首选一致性,因此您需要区分(在初始化列表中注意这完全明确定义:this->,而不是强迫x(x)自己处理少数案例。 ,通过参数x初始化成员x,只需获得更好的变量名称。

这是我唯一一次使用this:当我实际需要实例的地址时,无论出于何种原因。

答案 1 :(得分:8)

我个人从不使用它,除了:

  • 当我需要将'this'作为参数传递给另一个类
  • 的方法时
  • 在赋值运算符的实现中

答案 2 :(得分:8)

我只记得用

做这件事
delete this;

答案 3 :(得分:6)

当函数参数和实例变量之间存在歧义时。

当然应该避免这种歧义!最好更改函数参数名称,而不是为实例参数的所有访问产生开销(即前缀),但是......

答案 4 :(得分:5)

当您使用的变量位于您正在使用的范围“上方”时,它就可以使用。

int i;
public void foo() {
    int i;
    i = 3; // assign local variable
    this->i = 4; // assign global variable
}

除了访问另一个范围内的变量外,我自己也同意你的“简约选择”。少即是多。 : - )

答案 5 :(得分:3)

我喜欢用它来澄清,就像访问继承的成员一样。如果您没有传达该信息的命名约定,它会提醒读者变量的来源。

在以下情况下必须使用this指针:

  • 返回当前对象。
  • 设置对象之间的关系(将this传递给构造函数或setter)
  • 检查自我参考:this != argPtr

答案 6 :(得分:2)

对我来说,这取决于。如果它是一个短函数或变量,我只需输入(例如mCount)。但是,大多数情况下,我使用非常具有描述性的成员变量和函数名称(例如mExclusivelyLockedDigitalIOList)。在这些情况下,我倾向于使用this指针让Visual Studio的IntelliSense完成我的输入。节省击键和拼写错误。