gpt4 book ai didi

C++ 表达式 - 两者中哪一个更快?

转载 作者:太空狗 更新时间:2023-10-29 20:11:48 30 4
gpt4 key购买 nike

我一直在试用 C++,我对两个脚本的性能特别感兴趣。一个小介绍:

我有一个名为 Point 的类,用于试验极坐标中给出的点。该类包含两个私有(private)双变量,常用函数 get、set 和公共(public)函数 rotate,后者采用双参数并将其添加到极坐标形式的当前角度以生成新的 Point 对象。

下面是函数旋转的两个不同脚本:

void Point::rotate(double theta) {
double A = getA();
A += theta;
setA(A);
}

void Point::rotate(double theta) {
setA(getA() + theta);
}

我的问题很简单:

哪个实际上更快,为什么?

我知道第一种方法必须使用 getA() 然后将其保存到变量 A 中,所以很可能需要更长的时间/效率较低。更一般地说,在计算表达式时,是否需要将表达式的大部分保存在其他变量中然后使用它们?(假设编写代码的“人”不会出错,以后可能需要阅读代码的每个人都会完全理解。)

一个简单的例子来澄清我的问题:

假设我们想要计算 a+b+c。将 a+b 保存在一个新变量中是否更好,比如 d,然后将 d 添加到 c 中?如何调用带有参数的函数另一个函数评估?

提前致谢!

最佳答案

这两个表达式是相同的。理想情况下,您始终可以运行一个基准测试,在该基准测试中您在循环中多次调用表达式并查看时差。

然而,另一种看待它的方式是回答问题的第二部分,它谈到了a+b+c。当代码将被翻译成汇编时,a+b 无论如何都会存储在某个寄存器中,然后添加到 c,因为汇编中没有 3 位数加法的操作.因此,在以下方面不会有区别:

c =  a + b + c

d = a + b
c = c + d

此外,许多其他优化是由编译器完成的,这导致这些事情没有什么不同。

关于C++ 表达式 - 两者中哪一个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31428042/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com