constexpr表现更差?

时间:2015-11-26 17:45:14

标签: c++ performance c++11 constexpr

我正在尝试使用constexpr来评估性能差异。我使用以下代码:

#include<iostream>
using namespace std;

constexpr double factorial(int n) {

    return n==0?1:n*factorial(n-1);
}

main() {
    double a=0;
    for(int i=0;i<10000000;i++) {
        a+=factorial(100);

    }
    cout<<a<<endl;
}

我尝试了上述程序的两个版本,一个使用阶乘函数constexpr,另一个没有。{我希望看到constexpr版本在运行时运行得更好,但实际上运行速度较慢。以下是每项4项试验的测量结果(以秒为单位):

没有constexpr

2.691,2.835,2.768,2.748

使用constexpr

2.910,2.920,2.903,2.910

有人可以解释这背后的原因吗?我使用constexpr错了吗?我使用的是g ++ 4.9.1,我使用了O3优化标志。

编辑:最初将代理分配给a的代码。根据评论中的建议,它已经更新以添加结果。但性能差异仍然可见。

1 个答案:

答案 0 :(得分:1)

当计算在编译时完成时,

a是有利的。但是,编译器不需要这样做,除非您需要,例如,通过constexpr constexpr。在运行时import runpy class Project(object): def __init__(self, path): module = runpy.run_path(path) for k, v in module.items(): if not k.startswith('__'): self.__dict__[k] = v 对函数没有任何影响。

我的测试结果非常接近(delta为~0.1s),正如预期的那样。