1

有人请告诉我以下哪一项更快,为什么?

int add(int a, int b){
     return a+b;
}

或者

void add(int a, int *b){
     *b = a+(*b);
}
4

3 回答 3

5

很有可能函数是内联的,并且两者都会产生相同的生成代码。

于 2012-06-02T04:31:42.687 回答
2

您不应该试图通过查看代码来猜测哪个更快,而应该分析正在考虑的选项以查看一个是否比另一个更快,以及它是否真的有所作为。现在关于您的示例,我认为按值返回根本没有问题,因为现在大多数编译器都执行返回值和命名返回值优化,它们是复制省略的形式。最重要的是,C++11 引入了移动语义,这意味着在适用的情况下,数据从临时“移动”到目标。所以事实上,按值返回可能会更快,因为您不必检查输入。

有关按值传递的相关讨论,请参见此处,有关相关问题,请参见此处

于 2012-06-02T06:22:28.583 回答
0

返回值不太可能比保存值慢,因为值通常在寄存器中返回(通常是累加器,如果 CPU 有一个并且返回值适合)。

于 2012-06-02T04:37:21.653 回答