c++表达式——两者中哪一个更快
C++ expressions - which one of the two is faster?
我一直在尝试c++,我对两个脚本的性能特别感兴趣。一个小介绍:
我有一个叫做Point的类,用来实验极坐标中给出的点。该类包含两个私有双变量,通常的函数get、set和公共函数rotate,后者接受一个双参数,并将其以极坐标形式加到当前角度,生成一个新的Point对象。
下面是rotate函数的两个不同脚本: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
同样,许多其他优化是由编译器完成的,这导致这些事情没有什么不同。
相关文章:
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 有没有办法一次声明相同类型的多个对象,并通过一个表达式立即使用相同的右值初始化它们?
- 替换密码:哪一个?
- 如何在一个表达式中生成并返回结果?
- For-loop或std::any_of,我应该使用哪一个?
- 哪一个是最好的方法类或结构?在 C++ 中
- 静态常量与常量局部变量,哪一个性能更好
- 一个互斥锁与多个互斥锁.哪一个更适合线程池?
- cv::String 和 std::string:何时使用哪一个以及必须同时使用两者?
- 为什么一个表达式中的 std::string 连接给出的结果与逐个字符不同的结果?
- 哪一个对物体检测更快?
- 哪一个更适合存储字符、矢量<char>或字符串?
- Visual C++ 和 gcc 之间从 std::isblank 返回不一致.哪一个错了
- 在 C 和 C++ 编程中使用哪一个更好?
- 这两者中的哪一个是实现标头的正确方法
- 带大小参数和不带大小参数的"运算符删除":当两者都可用时,选择哪一个?
- C++编译器在封装行为上存在分歧 - 哪一个做对了?
- 对于初学者来说,我应该学习" c or c++ "之间的哪一个才能使用Arduino UNO?
- c++表达式——两者中哪一个更快