在c ++中使用“this”关键字对性能有任何影响吗?

时间:2015-12-12 17:44:05

标签: c++ performance assembly heap-memory

很长一段时间以来,我一直在使用javascript,其中this关键字是必需的。现在,我用c ++编程,但仍然习惯使用this关键字。但真正的问题是 - 使用this关键字是否会对性能产生负面影响(如不必要的内存访问)?我的意思是 - 代码省略this对编译器更友好的优化还是完全没关系?因为理论上严格来说,引用this是指指针,如汇编程序中的opcode $reg0, [$reg1],它可以在代码中添加一个内存引用,但我想它应该由编译器以更聪明的方式处理不仅仅是典型的指针,我是对的吗?

我个人更喜欢使用this,因为我感觉有点迷失在不使用它的代码中,因为我不知道某些变量是成员还是本地或全局或什么,但如果它导致性能问题我可能会强迫自己避免它。

2 个答案:

答案 0 :(得分:5)

不,optimizing compiler(对于C ++ 11或更高版本)很可能会为this->fieldfield生成相同的二进制代码,并且同样适用于this->memberfun(2,3)memberfun(2,3)

(可能,即使没有优化,也会产生相同的效率代码;但我不确定)

有时(特别是在编码模板时)this是必需的,因为省略它有不同的含义(我忘了哪些奇怪的情况)。

当然,编译时间可能略有不同。但你不应该在乎。

出于可读性的原因,某些编码约定要求或(更常见)相反禁止使用this。选择你喜欢的任何惯例,但要保持一致。

另请参阅this answer,解释在Linux x86-64 ABI上如何处理this

答案 1 :(得分:4)

  

但真正的问题是 - 使用此关键字是否会对性能产生负面影响(如不必要的内存访问)?

没有

  

可以在代码中添加一个内存引用,但我想它应该由编译器以比典型指针更聪明的方式处理,我是对的吗?

: - )