c – gcc 4.7和递归constexpr函数
发布时间:2020-12-16 07:34:36 所属栏目:百科 来源:网络整理
导读:我正在使用constexpr递归进行一些尝试,并尝试查看它是如何编译的,我不明白 gcc在哪些情况下选择在编译时或运行时计算递归. 我正在使用以下阶乘计算代码: #include iostreamconstexpr unsigned int factorial(unsigned int i){ return i 0 ? i*factorial(i-1
我正在使用constexpr递归进行一些尝试,并尝试查看它是如何编译的,我不明白
gcc在哪些情况下选择在编译时或运行时计算递归.
我正在使用以下阶乘计算代码: #include <iostream> constexpr unsigned int factorial(unsigned int i) { return i > 0 ? i*factorial(i-1) : 1; } int main(void) { std::cout << factorial(X) << std::endl; } 并且我更改了阶乘中的值x. >在没有优化的情况下进行编译时,表达式不会在编译时计算. 有谁知道gcc 4.7实现递归函数作为编译时或运行时的规则是什么? 解决方法
如果在编译时需要,constexpr只保证在编译时进行评估.例如,这保证在编译时计算,因为枚举值必须是常量:
enum { VALUE = factorial(X) }; cout << VALUE << endl; 在编译时不需要它的任何情况下,它与将其声明为内联具有相同的效果:它只是一个提示,编译器可以自由地执行它想要的操作. 就像内联一样,现在大多数编译器都会完全忽略你的提示.出于性能原因,编译器希望能够内联事物,即使您没有要求它,并且有自己的算法来确定它何时是不值得的,那么为什么它会在内容中查看内联关键字呢?所有? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |