使用"this->"的性能处罚?
Performance penalties on using "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++ 文件生成符号汇编代码,并且两者应相同。
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么使用 "this" 指针调用派生成员函数?
- OpenMP阵列性能较差
- 递归列出所有目录中的C++与Python与Ruby的性能
- 大小相等但成员数量不同的结构之间的性能差异
- 为什么constexpr的性能比正常表达式差
- C++错误:"error: int aaa::bbb is protected within this context"
- 我可以将调用类的"this"传递给 lambda 函数吗?
- 在类中使用随机生成器时出现性能问题
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 关于C++中具有多重继承"this"指针的说明
- 使用'this->'成员变量访问的性能
- 使用"this ->"引用类的成员是否有好处或性能提升?
- 使用"this->"的性能处罚?
- 在 c++ 中使用 "this" 关键字对性能有影响吗?
- 使用 static_cast 处理混合(基础和派生)对象的向量是否存在性能风险?(又名 "it this a dumb idea?" )
- 在 Go 方法中按值传递"this"是否会对性能造成损失?
- std::函数与原始函数指针和void* this的性能比较