考虑C类中两个类似C ++成员函数的示例:
void C::function(Foo new_f) {
f = new_f;
}
和
void C::function(Foo new_f) {
this->f = new_f;
}
这些函数是否以相同的方式编译?使用this->
(更多内存访问或其他内容)是否有任何性能损失?
答案 0 :(得分:9)
是的,它完全相同,你会得到相同的表现。
你真正必须使用this->
语法的唯一时间是你有一个与你想要访问的实例变量同名的函数的参数。使用变量名称本身将引用参数,因此您需要this->
。当然,您也可以重命名参数。而且,正如ildjarn在评论中也指出的那样,你需要在某些情况下使用this
来调用依赖的函数,因为this
是隐式依赖的(尽管你可以阅读更多内容)。 / p>
答案 1 :(得分:3)
从编译器的角度来看,this->
是隐式的和显式的没有区别。
但是,请记住,代码应该主要针对人类读者编写,其次才是编译器。从这个角度来看,使用this->
(除了在真正需要的几个地方除外)是一个巨大的损失,应该从所有代码中删除。
答案 2 :(得分:2)
这是速记。在这种情况下,它完全相同。
答案 3 :(得分:1)
结果代码没有性能损失,因为编译器必须使用this
来访问该成员。
对于我阅读代码, 是一个性能损失,因为我必须在此停下来思考“为什么this->
需要在这里?是否涉及编码技巧?我有吗?只是错过了关于这个课程的重要内容?或者编码器是否只是无缘无故地随机插入this->
?“。
答案 4 :(得分:0)
编译器会为您使用此指针,而您甚至不知道它。每当你自己输入它时,你就明确地说明了它,但是(在某些情况下)没有必要。
答案 5 :(得分:0)
您可以通过在GCC下使用标志-S编译它们来比较两个函数的汇编输出。这将为输入C / C ++文件生成符号汇编代码,两者应该完全相同。