c – 我们应该为函数的返回值使用临时变量吗?
发布时间:2020-12-16 06:04:27 所属栏目:百科 来源:网络整理
导读:我想到了:这两种做法有差异吗? 将函数的返回值存储在临时变量中 将该变量作为另一个函数的参数. 将功能放入其他功能. 规范 假设所有类和函数都正确写入. 情况1. ClassA a = function1();ClassB b = function2(a);function3(b); 情况2. function3(function2
我想到了:这两种做法有差异吗?
>将函数的返回值存储在临时变量中 规范 假设所有类和函数都正确写入. 情况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 为什么第一个比较慢,如果第二个更快,为什么我们总是这样写代码呢?无论如何,第二个pratice有一个名字? 解决方法
如果您想要计算紧缩和数字变得更加一致,请打破这个全面的优化.确保获得适当值的代码实际上是运行而不是完全抛出的,我已将两个测试中的结果分配给一个易变的本地(这不是完全正确的使用volatile,而是确保只有价值创造是显着的三角洲).
#include <iostream> #include <ctime> #include <cmath> using namespace std; int main() { clock_t start; volatile double val; for (int j=1;j<=10;j++) { // Case 1. start = clock(); for (int i=0; i<2000000; i++) { double a = cos(1); double b = pow(a,2); val = sqrt(b); } cout << j << ':' << (double) (clock() - start) / CLOCKS_PER_SEC << endl; // Case 2. start = clock(); for (int i=0; i<2000000; i++) val = sqrt(pow(cos(1),2)); cout << j << ':' << (double) (clock() - start) / CLOCKS_PER_SEC << endl << endl; } return 0; } 在我的Macbook Air上生成以下版本编译输出(这是没有任何延伸的速度恶魔): 1:0.001465 1:0.001305 2:0.001292 2:0.001424 3:0.001297 3:0.001351 4:0.001366 4:0.001342 5:0.001196 5:0.001376 6:0.001341 6:0.001303 7:0.001396 7:0.001422 8:0.001429 8:0.001427 9:0.001408 9:0.001398 10:0.001317 10:0.001353 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |