#include <iostream>
struct A
{
constexpr A( bool b ) : n( b ? 5 : 10 ) {}
size_t n;
};
int main()
{
int a[A( true ).n];
int b[A( false ).n];
int i = 0;
for ( int &x : a ) x = i++;
i = 0;
for ( int &x : b ) x = i++;
for ( int x : a ) std::cout << x << ' ';
std::cout << std::endl;
for ( int x : b ) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
const int x- 变量x在程序运行期间不应该改变,但是constexpr int x- 它也应该在编译时获得它的值......例如,
它会起作用,x 会得到它的值,这个值不能改变——但它会在程序运行时得到它。
如果你写
constexpr- 它不会编译,因为它x在编译时是未知的。因此,使用更适合您的目的。在可能的地方——更好
constexpr,在不可能的地方——简单const。最简单的例子。这个程序编译
但是这个程序不是。
constexpr当此说明符用于函数时,也具有重要意义。如您所知,只有类成员函数可以具有
const与调用该类成员函数的对象相关的限定符。普通函数不能是 const。
引入说明
constexpr符是为了强制编译器在编译阶段创建对象并将它们用作编译时常量。例如,众所周知,C++ 标准需要一个常量表达式来指定数组的维数。使用说明符,
constexpr您可以使用某些函数设置数组的大小。例如,将程序输出到控制台
使用
constexpr允许您进行编译时元编程作为模板元编程的替代方法。