2

考虑这个类 C 中两个相似的 C++ 成员函数的示例:

void C::function(Foo new_f) {
    f = new_f;
}

void C::function(Foo new_f) {
    this->f = new_f;
}

这些函数是否以相同的方式编译?使用this->(更多内存访问或其他)是否有任何性能损失?

4

6 回答 6

9

是的,它完全相同,您将获得相同的性能。

唯一真正必须使用该this->语法的情况是,当函数的参数与要访问的实例变量同名时。单独使用变量的名称将引用参数,因此您需要this->. 当然,您也可以重命名参数。而且,正如 ildjarn 在评论中指出的那样,您需要this在某些情况下使用来调用依赖的函数,因为this它是隐式依赖的(尽管您可以阅读更多相关信息)。

于 2012-05-11T23:22:27.853 回答
3

this->从编译器的角度来看,隐式和显式没有区别。

但是请记住,代码应该主要是为人类读者编写的,其次才是为编译器编写的。从这个角度来看,使用this->(除了在少数地方确实需要它)是一个巨大的损失,应该从所有代码中删除。

于 2012-05-11T23:23:27.033 回答
2

这是一个简写。在这种情况下,它是完全相同的。

于 2012-05-11T23:22:23.970 回答
1

结果代码没有性能损失,因为this无论如何编译器都必须使用它来访问该成员。

阅读代码会对我造成性能损失,因为我不得不停在这里思考“为什么this->需要在这里?是否涉及编码技巧?我是否错过了有关该课程的重要内容?或者编码人员只是插入了一个this->无缘无故随机?”。

于 2012-05-12T06:31:27.633 回答
0

编译器会在你不知道的情况下为你使用这个指针。每当您自己键入时,您都会明确说明它,但(在某些情况下)没有必要。

于 2012-05-11T23:23:43.133 回答
0

您可以通过在 GCC 下使用标志 -S 编译这两个函数来比较它们的汇编输出。这将为输入的 C/C++ 文件生成符号汇编代码,并且两者应该相同。

于 2012-05-12T01:22:53.837 回答