假设我们有一个非常简单的算法来检查两个数字之间的最大值:
(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) 更快,因为它不会在函数内部复制 a
和 b
变量吗?我确实意识到对于这个特定示例,执行时间差异几乎没有,但我很高兴知道在涉及复杂函数和数据传递时是否会有更大的差异。
最佳答案
由于 int
是内置类型,如果没有内联,那么在 int
上使用指针会比直接使用它们慢。 int
的复制便宜,并且存储成本不比指针高,但指针在使用数据之前需要取消引用。
所以在这种情况下,使用 max
,编译器可能会编写相同的代码(试试 godbolt.org),但是对于更复杂的函数,或者如果函数在另一个编译单元中而你不使用链接时间优化,您会看到速度上的差异。有时。
当然,如果它不止是一个int
,那就要看情况了。您将必须测量(两个指针通常没问题,这就是 string_view
"is")。
关于c++ - 哪种方法更好,性能明智,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52803549/