constexpr 关键字的功能是使指定的常量表达式获得在程序编译阶段计算出结果的能力,而不必等到程序运行阶段。C++ 11 标准中,constexpr 可用于修饰普通变量、函数(包括模板函数)以及类的构造函数。注意:不是所有情况下都能在编译阶段算出来
修饰普通变量
#include <iostream> int main(void) { constexpr int n = 1 + 2 + 3; int array[n] = { 1 }; }
如果去掉constexpr很明显会报错。
修饰函数必须满足以下需求:
- 整个函数的函数体中,除了可以包含 using 指令、typedef 语句以及 static_assert 断言外,只能包含一条 return 返回语句。
- 该函数必须有返回值,即函数的返回值类型不能是 void。
- 函数在使用之前,必须有对应的定义语句。我们知道,函数的使用分为“声明”和“定义”两部分,普通的函数调用只需要提前写好该函数的声明部分即可(函数的定义部分可以放在调用位置之后甚至其它文件中),但常量表达式函数在使用前,必须要有该函数的定义。
- return 返回的表达式必须是常量表达式(即能在编译期间算出来)