深入学习C++ 关键字:constexpr

346 阅读1分钟
关键字:
    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只能定义编译期常量(还可以修饰函数)

示例1int a = 1;
const int b = a ; //运行期, 因为b的值只能在运行时期确定
//constexpr int b1 = a; 出错

修饰函数(能编译期出结果就编译期出结果,否则就运行期出结果)
示例2constexpr int fact(int n) {
    return n < 1 ? 1 : (n * fact(n - 1));
}

fact(10); //编译期就能出结果

int a = 10;
fact(a); //运行期出结果,因为a是在运行期才能得到的
另外还有一个与const不同的是,当constexpr修饰指针时仅对指针本身有效