【发布时间】:2020-08-30 19:19:58
【问题描述】:
我了解constexpr 关键字可用于在 C++ 中执行编译时计算。例如:
constexpr int factorial(int n)
{
return n <= 1 ? 1 : (n * factorial(n - 1));
}
(取自https://en.cppreference.com/w/cpp/language/constexpr)
是否可以将编译时计算视为 C++ 与 C 的主要优势?
据我了解,编译时计算在 C 中是不可能的。constexpr 不可用,我相信代码必须在运行时进行评估。
这是 C++ 程序与同等 C 程序相比可以获得更好性能(例如速度)的一种方式吗?
【问题讨论】:
-
没有
constexpr或consteval并不意味着如果所有值都已知,编译器就不能在编译时进行计算。使用关键字告诉编译器意图是什么,以便编译器可以提醒您您犯的错误以确保您的意图。 -
有趣的事实:
constexpr的存在也不能保证编译时计算。 -
当然,我同意编译时评估可以在没有
constexpr的情况下进行。另外,我同意关键字并不意味着在所有情况下都进行编译时评估。但是,据我所知,当使用常量表达式参数调用声明的函数时,它会保证编译时评估。
标签: c++ c metaprogramming constexpr compile-time