可能重复:
Is there any reason to use this->
When should this-> be used?
When should I make explicit use of thethis
pointer?
当使用指向类的指针时,我喜欢在类的变量前面添加一个this->
,以便更清楚我正在谈论的变量是在当前类中,而不是临时变量等等,所以我的行将是
if(this->thing > other->thing)
this->doFoo();
而不是
if(thing > other->thing)
doFoo();
可以添加多余的this
,还是会降低代码的可读性?
答案 0 :(得分:4)
一致性一致性。
如果您在整个项目中使用它,无论访问成员的哪个位置,我都会将this->
前缀作为有效的编码样式。
我更喜欢为成员使用表示前缀,例如m_
。我觉得它比明确的这个>:
(alpha-this->gamma > this->alpha-gamma)
VS
(alpha-m_gamma > m_alpha-gamma)
(dotNetties标记为m_
已过时 - 我在小型C#项目中使用它已经过时了。但无论如何,任何其他不同的前缀也会这样做。)
我已经看到它经常用来帮助intellisense进入,或者专门过滤成员 - 这是好的,尽管因为这个原因而留下它是有问题的,特别是如果不能始终如一地使用。
答案 1 :(得分:3)
这取决于您的编码风格,但很多人会使用
_myVariable
m_myVariable
myVariable_
区分成员变量与其他变量。
但最重要的是要保持一致
答案 2 :(得分:2)
这是一个风格问题,所以答案是主观的。同样,很多与我一起工作过的人喜欢用m_
为成员变量添加前缀,以明确它是一个成员。 (m_foo
就像你的this->foo
。)然后我确信有人认为这是对宇宙的犯罪。因人而异。使用适合您和您可能合作的任何人。
this->
的一个优点(或缺点,取决于你问的对象)是你可以拥有一个同名的变量,既可以是成员,也可以是本地范围内的参数或局部变量,例如: :
foo bar;
void f(foo bar)
{
this->bar = bar;
}
答案 3 :(得分:2)
如前所述,这主要是风格问题。
我个人不会将它用于数据成员(我使用m
前缀替代),但我确实将它用于函数:
this
可能需要推迟查找我认为,因为您在阅读某些代码时绝对不想跋涉基类级别,this->
澄清使读者更容易 。而且只需输入6个字符。
答案 4 :(得分:1)
我也喜欢这种模式,但我更喜欢托管代码中的“这个”。 - 箭头操作符确实感觉有点吵闹,但是当你提到实例级别的东西时它仍然非常清楚。
答案 5 :(得分:1)
当然你可以做到,此外,编译器会为你添加它。
答案 6 :(得分:-1)
通常,当方法参数和成员变量具有相同名称时,使用this
表示法。 (将方法参数与成员变量区分开来)
比如说,
void CMYClass::fun1(int sameName)
{
...
this->sameName = sameName;
}
否则,这只是一个品味问题...