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

亚历克斯·阿帕斯(Alex Apas)

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

我有一个叫Point的类,用于试验极坐标中给定的点。该类包含两个私有的double变量,通常的函数get,set和public函数rotation带有一个double参数,并将其以极坐标形式添加到我们当前的角度中,以生成一个新的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

同样,编译器还完成了许多其他优化,从而导致这些事情无济于事。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

哪一个更快?正则表达式还是EndsWith?

来自分类Dev

C ++中的const双重表达式

来自分类Dev

C中的+(+ k--)表达式

来自分类Dev

C中的意外表达式

来自分类Dev

什么是C中的子表达式?

来自分类Dev

C中的多表达式宏

来自分类Dev

C ++中的表达式评估问题

来自分类Dev

C中的对应表达式

来自分类Dev

用?解释一个C表达式 :和>

来自分类Dev

如何用C#中的另一个表达式创建表达式?

来自分类Dev

表达式的类型是否必须与C中的条件表达式相同?

来自分类Dev

C ++ for循环更新表达式中的赋值表达式

来自分类Dev

如何从表达式健全的属性C#中获取表达式

来自分类Dev

用于解析C ++中的数组索引表达式的正则表达式

来自分类Dev

C和C ++标准中“表达式”的定义

来自分类Dev

在C中解析正则表达式

来自分类Dev

C ++中的正则表达式字符类减法

来自分类Dev

解释C ++中的语句和表达式之间的区别

来自分类Dev

在JSP表达式中访问JSTL <c:forEach> varStatus

来自分类Dev

XML中的C#正则表达式标记

来自分类Dev

在C中模拟Lambda表达式的优雅方法

来自分类Dev

正则表达式在C#中不匹配

来自分类Dev

Sympy:逻辑表达式中的C代码

来自分类Dev

C ++ 11中的正则表达式替换

来自分类Dev

在c中的if语句中对表达式的求值

来自分类Dev

C中的正则表达式无法正常工作

来自分类Dev

如何检查C中的表达式是否恒定?

来自分类Dev

C ++中的条件表达式是否总是布尔类型?

来自分类Dev

&variable作为表达式在c中的含义是什么