多年前,我养成了使用这个的习惯 - >访问成员变量时。我知道这不是绝对必要的,但我认为它更清楚。
然后,在某些时候,我开始更喜欢更简约的风格,并停止了这种做法......
最近我被一位更年轻的同龄人问到我是否认为这是一个好主意我发现我对自己的偏好没有真正的答案...这真的是一个完全风格的选择还是有真正的原因,为什么不加前缀这个>成员变量访问更好吗?
答案 0 :(得分:37)
虽然这是一个完全主观的问题,但我认为一般的C ++社区更喜欢而不是拥有this->
。它的混乱,完全不需要。
有些人用它来区分成员变量和参数。更常见的做法是在成员变量前加上一些内容,例如单个下划线或m
或m_
等。
在我看来,这更容易阅读。如果您需要this->
来区分变量,那么您做错了。更改参数名称(从x
到newX
)或具有成员变量命名约定。
首选一致性,因此您需要区分(在初始化列表中注意这完全明确定义:this->
,而不是强迫x(x)
自己处理少数案例。 ,通过参数x
初始化成员x
,只需获得更好的变量名称。
这是我唯一一次使用this
:当我实际需要实例的地址时,无论出于何种原因。
答案 1 :(得分:8)
我个人从不使用它,除了:
答案 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完成我的输入。节省击键和拼写错误。