【发布时间】:2012-04-21 12:17:37
【问题描述】:
使用 VS 2010 全面优化 /Ox 查看以下两个函数调用:
static string test1(const string& input)
{
return input;
}
static void test2(const string& input, string& output)
{
output = input;
}
如果我使用后一个 test2,那么函数总是被优化出来并且代码被内联。但是,除非我关闭异常,否则 test1 不会内联。有人知道为什么吗?
此外,如果编译器使用返回值优化,我希望编译器能够在 test1 中像 test2 一样高效地完成工作,但它似乎没有这样做。这也让我很困惑。
我想使用第一个函数签名的原因是我有两个可编译的函数版本。我希望调用代码始终调用 test1 并且当设置了某个编译标志时,我希望它将输入附加到副本并返回它,当未设置编译标志时,我希望它尽可能接近否-op 尽可能。
【问题讨论】:
标签: c++ optimization inline compiler-optimization return-value-optimization