0

假设我们有一个非常简单的算法来检查两个数字之间的最大值:

(1)

#include <iostream>

using namespace std;

int max(int* a, int* b) {
  return (*a > *b ? *a : *b);
}

int main() {
  int a, b;

  cin >> a >> b;
  cout << max(&a, &b) << endl;

  return 0;
}

(2)

#include <iostream>

using namespace std;

int max(int a, int b) {
  return (a > b ? a : b);
}

int main() {
  int a, b;

  cin >> a >> b;
  cout << max(a, b) << endl;

  return 0;
}

第一种情况 (1) 是否会比第二种情况 (2) 快,因为它不会在函数内部复制ab变量?我确实意识到,对于这个特定的示例,执行时间几乎没有差异,但我很高兴知道在复杂函数和传递的数据方面是否会有更大的差异。

4

1 回答 1

1

int内置类型一样,如果没有内联,则使用指针int将比直接使用它们要慢。ints 复制起来很便宜,存储成本也不比指针高,但是指针需要在数据可以使用之前取消引用。

所以在这种情况下,max编译器可能会编写相同的代码(试试 godbolt.org),但是对于更复杂的函数,或者如果函数在另一个编译单元中并且您没有使用链接时间优化,您将看到速度的差异。有时。

当然,如果它不仅仅是一个int,那么它将取决于。你将不得不测量(两个指针通常很好,这就是string_view“是”)。

于 2018-10-14T14:20:39.157 回答