c++ - 显示在 C++ 中创建临时文件的位置

标签 c++ copy-elision temporaries

找出在我的 C++ 代码中创建临时变量的最快方法是什么?

答案并不总是很容易从标准中推导出来,编译器优化可以进一步消除临时变量。

我已经在 godbolt.org 上进行了试验,它非常棒。不幸的是,当涉及到临时文件时,它经常将树隐藏在汇编程序的木头后面。此外,激进的编译器优化选项使汇编器完全不可读。

还有其他方法可以实现吗?

最佳答案

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

看来你对C++的语义有一点误解。 C++ 标准讨论临时对象来定义程序的形式语义。这是描述大量可能执行的紧凑方式。

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

现在标准描述的一些语义只能通过相当接近的近似来实现。当析构函数有明显的副作用时(想想 std::cout),这些类型的临时变量不能完全消除。但是真正的编译器可能会在不分配任何存储空间的情况下实现可见的副作用。暂时存在或暂时不存在的概念是二元的观点,实际上存在中间形式。

关于c++ - 显示在 C++ 中创建临时文件的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48412892/

相关文章:

c++ - 复制省略误区

c++ - 用于禁用 C++ “features” 的编译器选项

c++ - 用于返回的自动变量的复制省略

c++ - 即使使用 -fno-elide-constructors 进行编译,似乎也会发生复制省略

c++ - 复制/move 省略需要复制/move 构造函数的显式定义

c++ - 编译器如何使用编译器生成的临时文件确定函数所需的堆栈大小?

c++ - 使用 C/C++ 在 Windows 中连接 USB 和个人创建的设备

c++ - 如何在没有警告的情况下将 float 转换为 size_t