考虑这个功能:
std::string
myClass::myFunction2() {
std::string result = myClass::myFunction1();
return result;
}
我希望编译执行return value optimization。如何确保实际发生这种情况,代码不会冗余地复制结果?
答案 0 :(得分:4)
如果可能,RVO 始终。对于您的情况,假设myFunction1()根据执行路径不返回不同的命名对象,编译器应执行RVO。如果它返回具有不同执行路径的不同命名对象,则编译器无法执行优化。
我建议你做自己的实验:
要在任何地方停用优化,请使用 pragma :
#pragma GCC push_options
#pragma GCC optimize (ARG)
//your code
#pragma GCC pop_options
要停用特定功能的优化,请使用 __ attribute __(()):
void __attribute__((optimize(ARG))) foo(unsigned char data) {
// your code
}
ARG 可以是数字(即优化级别)或以0开头的字符串(即优化选项)等。根据需要,您可以用“O0”替换ARG然后运行使用 gcc -S 查看代码的两个版本以查看差异。我建议你阅读gcc 4.4或更新的文档。