我想了想:这两种做法是否存在性能差异:
- 将函数的返回值存储在临时变量中,而不是将该变量作为参数提供给另一个函数。
- 将函数放入另一个函数中。
规格
假设所有类和函数都正确编写。
情况1。
ClassA a = function1();
ClassB b = function2(a);
function3(b);
案例 2。
function3(function2(function1()));
我知道只运行一次没有太大区别,但假设我们可以在一个循环中运行很多次,我创建了一些测试。
测试
#include <iostream>
#include <ctime>
#include <math.h>
using namespace std;
int main()
{
clock_t start = clock();
clock_t ends = clock();
// Case 1.
start = clock();
for (int i=0; i<10000000; i++)
{
double a = cos(1);
double b = pow(a, 2);
sqrt(b);
}
ends = clock();
cout << (double) (ends - start) / CLOCKS_PER_SEC << endl;
// Case 2.
start = clock();
for (int i=0; i<10000000; i++)
sqrt(pow(cos(1),2));
ends = clock();
cout << (double) (ends - start) / CLOCKS_PER_SEC << endl;
return 0;
}
结果
- 案例 1 = 6.375
- 案例 2 = 0.031
为什么第一个慢得多,如果第二个更快,为什么我们不总是那样写代码?无论如何,第二个练习有名字吗?
我还想知道如果我在第一种情况下在 for 循环之外创建变量会发生什么,但结果是一样的。为什么?