有人请告诉我以下哪一项更快,为什么?
int add(int a, int b){
return a+b;
}
或者
void add(int a, int *b){
*b = a+(*b);
}
很有可能函数是内联的,并且两者都会产生相同的生成代码。
您不应该试图通过查看代码来猜测哪个更快,而应该分析正在考虑的选项以查看一个是否比另一个更快,以及它是否真的有所作为。现在关于您的示例,我认为按值返回根本没有问题,因为现在大多数编译器都执行返回值和命名返回值优化,它们是复制省略的形式。最重要的是,C++11 引入了移动语义,这意味着在适用的情况下,数据从临时“移动”到目标。所以事实上,按值返回可能会更快,因为您不必检查输入。
返回值不太可能比保存值慢,因为值通常在寄存器中返回(通常是累加器,如果 CPU 有一个并且返回值适合)。