可以使用这个指针吗?

时间:2011-01-20 06:52:44

标签: c++ class pointers this this-pointer

  

可能重复:
  Is there any reason to use this->
  When should this-> be used?
  When should I make explicit use of the this pointer?

当使用指向类的指针时,我喜欢在类的变量前面添加一个this->,以便更清楚我正在谈论的变量是在当前类中,而不是临时变量等等,所以我的行将是

if(this->thing > other->thing)
    this->doFoo();

而不是

if(thing > other->thing)
    doFoo();

可以添加多余的this,还是会降低代码的可读性?

7 个答案:

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

否则,这只是一个品味问题...