C++-const详解

被const修饰声明的对象只读

1
2
3
4
const int i = 100;
int j = 0;
i = j;//非法,导致编译错误
j = i;//合法

必须初始化

1
2
const int i = 10;
const j;//非法,编译错误

非静态类成员函数后置const

此函数不能更改类成员变量

const常量值可以被修改

1
2
3
4
const int i = 100;
int *p = (int*)&i;
*p = 10; //编译器中i = 10
cout << i; //100

通过强制类型转换,将地址赋给变量,再修改即可更改其值

虽然地址中的值已经改变,但是如果代码中再次用到修改了值的常量i,其值还是最开始定义的值

有关const指针

  1. 当 const 位于*左侧,表示指针所指对象为常量,不能通过解引用修改其数据,但指针本身是变量,可以指向内存单元
  2. 当 const 位于*右侧,表示指针本身为常量,不能修改其指向的内存单元,但所指向对象为变量,可以通过解引用修改其数据
  3. *两侧各有一个 const 时,其指针和所指向内存单元都不能修改
  4. 此处我总结一个口诀,const右边先是什么,什么就不能修改;即const 右边为 *,如 const int* aint const* a ,都无法改变 * a,而int* const a,则a无法改变。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    const int* a = new int(10);
    int const* b = new int(11);
    int* const c = new int(12);
    a = new int(-11);
    *a = *a + 1;// error
    b = new int(-12);
    * b = *b + 1;// error
    c = new int(-13);// error
    *c = *c + 1;