【发布时间】:2013-09-03 13:58:23
【问题描述】:
假设我使用带有 -O2 的 Visual Studio 或现代 GCC。编译器会在func() 中创建S,然后将其复制到my_result,还是使用构造函数(5, 6, 5 + 6) 创建my_result,而不创建临时S?
注意: 函数func() 定义及其用法在单独的.obj 文件中!
struct S
{
S(int _x, int _y, int _z) : x(_x), y(_y), z(_z) { }
int x, y, z;
};
S func(int a, int b)
{
return S(a, b, a + b);
}
/// USAGE ///
S my_result = func( 5, 6 );
【问题讨论】:
-
你试过了吗?结果如何?
-
这取决于编译器和优化级别以及平台和...一切。但我希望一个像样的编译器能够进行这种优化,至少在发布版本中是这样。
-
@viraptor 我什至不知道如何检查这个优化是否完成。
-
@pavelkolodin 您可以检查编译器给出的汇编器输出。对于简短的二进制文件,它非常易读。对于 gcc,这将是
-S选项。 VS 会有自己的。