很长一段时间以来,我一直在使用javascript,其中this
关键字是必需的。现在,我用c ++编程,但仍然习惯使用this
关键字。但真正的问题是 - 使用this
关键字是否会对性能产生负面影响(如不必要的内存访问)?我的意思是 - 代码省略this
对编译器更友好的优化还是完全没关系?因为理论上严格来说,引用this
是指指针,如汇编程序中的opcode $reg0, [$reg1]
,它可以在代码中添加一个内存引用,但我想它应该由编译器以更聪明的方式处理不仅仅是典型的指针,我是对的吗?
我个人更喜欢使用this
,因为我感觉有点迷失在不使用它的代码中,因为我不知道某些变量是成员还是本地或全局或什么,但如果它导致性能问题我可能会强迫自己避免它。
答案 0 :(得分:5)
不,optimizing compiler(对于C ++ 11或更高版本)很可能会为this->field
和field
生成相同的二进制代码,并且同样适用于this->memberfun(2,3)
和memberfun(2,3)
。
(可能,即使没有优化,也会产生相同的效率代码;但我不确定)
有时(特别是在编码模板时)this
是必需的,因为省略它有不同的含义(我忘了哪些奇怪的情况)。
当然,编译时间可能略有不同。但你不应该在乎。
出于可读性的原因,某些编码约定要求或(更常见)相反禁止使用this
。选择你喜欢的任何惯例,但要保持一致。
另请参阅this answer,解释在Linux x86-64 ABI上如何处理this
。
答案 1 :(得分:4)
但真正的问题是 - 使用此关键字是否会对性能产生负面影响(如不必要的内存访问)?
没有
可以在代码中添加一个内存引用,但我想它应该由编译器以比典型指针更聪明的方式处理,我是对的吗?
是
: - )