是否有任何开销使用此 - >访问会员?

时间:2010-11-10 23:50:29

标签: c++ performance this

访问某个班级的成员时,我可以使用例如:

this->myVar = 10 

或者我可以写:

myVar = 10

我喜欢使用this->,因为它明确声明变量是这个类的成员,但与单独使用变量名相比,它是否会产生任何开销?

作为替代方案,我可以为vars添加一个唯一的前缀,例如_TmyVar,但我已经使用this->很长一段时间,所以我只是想知道。

5 个答案:

答案 0 :(得分:37)

没有开销。编译器将为两个版本生成完全相同的代码。

答案 1 :(得分:11)

这两行代码具有相同的含义。 this->隐含在第二行中。他们完全一样。

因此,它们的表现完全相同: - )

答案 2 :(得分:8)

意义上没有区别(除非有多个名称myVar可见,在这种情况下,普通版本可能表示函数本地变量,而this->myVar表示成员)。所以是的,这只是风格问题。

答案 3 :(得分:3)

  

我喜欢用这个 - >因为它   明确声明该变量   是这个类的成员,但它做到了   与之相比,发生任何开销   只使用变量名称   本身?

是的,更多的是编写,更多的是阅读,并向读者表明它是由不熟悉C ++的人编写的,因此他们必须花费额外的时间仔细检查所有内容。所有这些都是程序员的开销。这需要花钱。

然而,没有任何开销通常不会产生任何成本,生成的机器代码的效率。

总结一下,这种代价高昂的开销很大,而且没有便宜/免费的那种。

  

作为替代方案,我可以添加一个   vars的唯一前缀,例如   _TmyVar,但我一直在使用这个 - >很长一段时间,所以我只是想知道。

表单_TmyVar的名称,以下划线后跟大写字母开头,为实现保留。

不要那样做。

非静态数据成员的两个最常见的C ++命名约定是myVar(前缀my)和var_(后缀_)。

干杯&第h。,

答案 4 :(得分:-1)

我有时会使用明确的 - >在setter中,因为它们允许我使用与实例字段相同的参数名称:

class MyClass 
{
    int foo;
    void setFoo(int foo) 
    {
        this->foo = foo;
    }
}

但是,在构造函数中,我通常使用初始化列表,它不需要显式的 - >

class MyClass 
{
    int foo;
    MyClass(int foo) : 
        foo(foo) 
    { 
    }
}