4

可能的重复:
有什么理由使用这个->
什么时候应该使用这个->?
我什么时候应该明确使用this指针?

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

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

代替

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

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

4

7 回答 7

4

一致性一致性一致性。

this->如果您在整个项目中在访问成员的任何地方都使用它,我认为前缀是一种有效的编码风格。

我更喜欢为成员使用表示前缀,例如m_. 我觉得它比明确的 this-> 更少切割器和更少的标签汤:

(alpha-this->gamma > this->alpha-gamma)

对比

(alpha-m_gamma > m_alpha-gamma)

(dotNetties 已标记为m_过时 - 我出于恶意在小型 C# 项目中使用它。但无论如何,任何其他不同的前缀也可以。)

我已经看到它经常用于帮助智能感知启动,或专门过滤成员 - 这没关系,尽管出于这个原因将其保留是有问题的,特别是如果没有始终如一地使用。

于 2011-01-20T07:06:33.067 回答
4

这取决于您的编码风格,但是很多人会使用

_myVariable
m_myVariable
myVariable_

区分成员变量。

但最重要的是保持一致

于 2011-01-20T07:00:41.707 回答
2

这是一个风格问题,所以答案将是主观的。同样,与我共事过的很多人都喜欢在成员变量前面加上前缀,m_以表明它是一个成员。(m_foo就像你的一样this->foo。)那么我敢肯定,有些人认为这是对宇宙的犯罪。YMMV。使用适合您和您可能与之共事的任何人的方法。

一个优点(或缺点,取决于你问谁)this->是你可以有一个同名的变量,它既可以是成员,也可以是局部范围的东西,如参数或局部变量,例如:

foo bar;

void f(foo bar)
{
   this->bar = bar;
}
于 2011-01-20T06:57:03.477 回答
2

如前所述,这主要是风格问题。

就我个人而言,我不将它用于数据成员(我使用m前缀替代),但我确实将它用于功能:

  • 为了与模板化代码保持一致,this可能需要延迟查找
  • 为了清楚起见,为了一目了然地区分它是类的方法(可能是基类)还是独立的函数

我认为,由于您在阅读一些代码时绝对不想在基类的各个级别上艰难跋涉,因此this->澄清使读者容易。只需再输入 6 个字符。

于 2011-01-20T07:31:15.613 回答
1

我也喜欢这种模式,但我更喜欢托管代码中的“this”。- 箭头操作符确实感觉有点吵,但是当你提到实例级的东西时它仍然很清楚。

于 2011-01-20T06:55:56.147 回答
1

当然你可以这样做,此外,编译器会为你添加它。

于 2011-01-20T09:15:35.843 回答
-1

this通常,当您的方法参数和成员变量具有相同名称时,您会使用符号。(区分方法参数和成员变量)

比如说,

void CMYClass::fun1(int sameName)
{
...
this->sameName = sameName;
}

否则,只是口味问题...

于 2011-01-20T07:03:53.783 回答