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

常量表达式(const expression)

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

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++ 指针
spa

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指针,不能指向新对象
}
相关文章
相关标签/搜索