C++:const限定符

初始化:const对象一经创建其值不能再改变,所以const对象必须初始化

范围:默认const对象仅在文件内有效。例外:extern const

常量引用:不能通过该引用修改所绑定的对象。 

int i=5;
int &r1=i;
const int &r2=i;
r1=1;    //正确,可以通过引用修改所绑定对象的值    
r2=0;    //错误,不能通过常量引用修改所绑定对象的值

指针和const:

  • *const 常量指针:把指针本身定义为常量
    • 不变的是指针本身的值,而非所指向常量的值。
  • const* 指向常量的指针:和常量引用一样,不能通过该指针改变对象的值。
  • const *const 指向常量对象的常量指针

顶层和底层const:

  • 顶层const:本身是常量,不能改变本身的值
  • 底层const:指向常量,可以改变自身的值
    •   不能用指向常量的指针去给一个指针赋值(这相当于用常数给指针赋值,不合法)

常量表达式:值不会改变,且在编译过程就能得到计算结果的表达式。

  • 字面值
    • 算术类型
    • 引用
    • 指针
  • 用常量表达式初始化的const对象
int size=27;    //数据类型只是普通int而非const int,值可能会改变,所以不是
const int sz=get_size();    //具体值要到运行时才能获取,所以不是

constexpr :如果你认定变量是一个常量表达式,就把它声明成constexpr类型 。constexpr int *p    //这是一个*const类型(C++11)

原文地址:https://www.cnblogs.com/tomatokely/p/8858133.html