使用"this->"的性能处罚?

Performance penalties on using "this->"?

本文关键字:性能 this- gt 使用      更新时间:2023-10-16

考虑一个类 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++ 文件生成符号汇编代码,并且两者应相同。