显示在C ++中创建临时对象的位置

帕特里克·弗罗伯格

发现在C ++代码中创建临时位置的最快方法是什么?

从标准中很难总是得出答案,编译器的优化可以进一步消除临时性。

我已经尝试过godbolt.org及其出色的功能。不幸的是,当涉及临时工时,它通常会将树木隐藏在汇编程序的木头后面。此外,积极的编译器优化选项使汇编器完全不可读。

还有其他方法可以做到这一点吗?

杂项

“编译器优化可以进一步消除临时性。”

似乎您对C ++语义有些误解。C ++标准讨论临时定义程序形式语义的问题。这是描述大量可能执行的紧凑方式。

实际的编译器根本不需要这样。通常,他们不会。真正的编译器了解寄存器,真正的编译器不假装POD具有(琐碎的)构造函数和析构函数。优化之前就已经发生了。我不知道会在调试模式下生成琐碎ctor的任何编译器。

现在,该标准描述的某些语义只能通过相当接近的方式才能实现。当析构函数具有可见的副作用(认为std::cout)时,不能完全消除这些类型的临时变量。但是实际的编译器可能会在不分配任何存储空间的情况下实现可见的副作用。临时存在或不存在的概念是二进制视图,实际上有中间形式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章