const in cpp

const容易混乱的地方在于底层const和顶层const概念。以及const与新标准中constexpr的区分。

顶层const和底层const

int *const p1 = &i; // 顶层
cosnt int ci = 42; // 顶层
const int *p2 = &ci; //底层
int const *p2 = &ci; //底层, effetive c++提示
const int *const p3 = p2; //两层

对此,effective c++给出一种好记的方法: 星号*左边是底层,星号*右边是顶层

底层/顶层在拷贝时的差异

int i = ci; //correct, ci是顶层const
p2 = p3; //correct, p2和p3都具有底层const语义,可以拷贝

const和constexpr

constexpr仅对指针本身有效,即只能产生顶层const语义

const int *p1 = nullptr;//底层
constexpr int *p2 = nullptr;//顶层
constexpr const int *p = &i;// 两层

所以顶层const语义一般使用constexpr代替,而底层const语义使用const定义。也可以把顶层语义称为常量,把底层语义称为不能修改?

原文地址:https://www.cnblogs.com/ijpq/p/15428278.html