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