使用 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 尽可能。