访问某个班级的成员时,我可以使用例如:
this->myVar = 10
或者我可以写:
myVar = 10
我喜欢使用this->
,因为它明确声明变量是这个类的成员,但与单独使用变量名相比,它是否会产生任何开销?
作为替代方案,我可以为vars添加一个唯一的前缀,例如_TmyVar
,但我已经使用this->
很长一段时间,所以我只是想知道。
答案 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)
{
}
}