constexpr明确定义了编译阶段常量。
在栈上定义的数组,数组的长度必须是一个常量表达式:
- int ayy[17];//正确
- int ayy[7 + 4]; //正确
- int length = 8; int ayy[length]; //错误,length是变量
常量表达式
常量表达式和非常量表达式的计算时机不同:
- 非常量表达式是在程序运行阶段计算;
- 常量表达式是在程序的编译阶段计算,这提高了程序的执行效率,节省了每次程序运行时都需要计算一次的时间。
功能
constexpr 关键字的功能,是使指定的常量表达式,获得在程序编译阶段,计算出结果的能力,而不必等到程序运行阶段。constexpr 可用于修饰普通变量、函数(包括模板函数)以及类的构造函数。注意,不代表 constexpr 修饰的表达式一定会在程序编译阶段被执行,具体的计算时机还是编译器说了算。
constexpr int length = 6;