考虑这个函数:
std::string
myClass::myFunction2() {
std::string result = myClass::myFunction1();
return result;
}
Run Code Online (Sandbox Code Playgroud)
我希望编译执行返回值优化。我怎样才能确保这确实发生了,并且代码不会重复复制结果?
如果可能的话,始终应用RVO 。对于您的情况,假设 myFunction1() 不会根据执行路径返回不同的命名对象,则编译器应执行 RVO。如果它返回具有不同执行路径的不同命名对象,则编译器无法执行优化。
我建议你自己做实验:
要在各处禁用优化,请使用pragmas:
#pragma GCC push_options
#pragma GCC optimize (ARG)
//your code
#pragma GCC pop_options
Run Code Online (Sandbox Code Playgroud)
要禁用特定函数的优化,请使用 __attribute__(()):
void __attribute__((optimize(ARG))) foo(unsigned char data) {
// your code
}
Run Code Online (Sandbox Code Playgroud)
ARG可以是数字(即优化级别)或以 0 开头的字符串(即优化选项)等。根据您的需要,您可以用“O0”替换 ARG 然后使用gcc -S运行两个版本的代码看看差异。我建议您阅读 gcc 4.4 或更高版本的文档。