关键字:
constexpr //C++11新特性
constexpr被期望用来验证一个变量的值是否是一个常量表达式。
声明为constexpr的变量一定是一个常量(这点跟const一样),而且必须用常量表达式初始化。
如:constexpr int a = 10; //20是常量表达式
constexpr int b = a + 1; //a + 1是常量表达式(因为a的值在编译期就能确定)
constexpr int c = getInt();//仅当getInt()是一个constexpr函数时正确
常量表达式是指:
1.值不会改变
2.编译器就能得到结果
与const的区别:
const既可以定义编译期常量,也可以定义运行期常量。(不能修饰成员函数之外的函数)
constexpr只能定义编译期常量(还可以修饰函数)
示例1:
int a = 1;
const int b = a ; //运行期, 因为b的值只能在运行时期确定
//constexpr int b1 = a; 出错
修饰函数(能编译期出结果就编译期出结果,否则就运行期出结果)
示例2:
constexpr int fact(int n) {
return n < 1 ? 1 : (n * fact(n - 1));
}
fact(10); //编译期就能出结果
int a = 10;
fact(a); //运行期出结果,因为a是在运行期才能得到的
另外还有一个与const不同的是,当constexpr修饰指针时仅对指针本身有效