C++11新特性-引入关键字constexpr

常量表达式(const expression)

常量表达式指在编译阶段就能得到值的一种表达式,表达式的值是不可改变的。

const int max_files = 20;             //yes
const int limit = max_files + 1;     //yes
int staff_size = 27;                  //no
const int sz = get_size();            //no

constexpr关键字

C++11引入了新关键字constexpr,constexpr声明的变量是const的,且必须用常量表达式来初始化。所以,constexpr声明的对象必须是全局对象(不在任何函数体内)

constexpr int mf = 20;            //20 is a constant expression
constexpr int limit = mf + 1;     //mf+1 is a constant expression
constexpr int sz = size();        //ok only if size is a constexpr function

用constexpr来声明指针

如果用constexpr来声明指针的话,constexpr作用于指针本身,而不是指针指向的对象。参考我的博文:C++ 指针

const int *p = nullptr;        //p is a pointer to a const int
constexpr int *q = nullptr;    //q is a const point to int

int i = 5;
int k = 7;
constexpr int j = 42;

int main()
{
    constexpr int *p1 = &i;    //p1是const指针,而不是指向const对象的指针
    *p1 = 6;
    cout << *p1 <<endl;     //output 6
    cout << i <<endl;       //output 6
    
    constexpr const int *p = &i;    //p是指向const对象的的const指针
    *p = 10; //error,指向const对象
    p = &k;  //error,const指针,不能指向新对象
}


你可能感兴趣的:(C++11新特性-引入关键字constexpr)