const in c

Author Avatar
Aryb1n 8月 24, 2017

一直不太知道const…

指针上使用const

char * const p;     //p的值不可变, 也就是指向不能变

const char * p;     //p所指向的内容不可变, [*]常用
char const * p;     // 同上, p指向的内容不能变

const char * const p;       //都不可变

如果const在指针的左边

如果const在指针的右边

const做函数形参

普通形参加不加const限定符对实参没有影响,引用形参和指针形参前面没有const限定符时,实参必须是非const的
所以要保证的是指针所指向的内容不变…所以是
fun(const int * arg)
的形式, 注意const位置

const成员函数

大概是这样子的

class A {
    ...
    func(...arg) const;
    ...
}

任何..不修改成员变量的函数都应当声明为const的. 这样子的话如果试图修改成员变量, 将报错???….就像是java里@override差不多. 为了增强程序的鲁棒性

但, 好像实际原因是这里的const其实是把this *给const掉了, 在汇编层面,this指针是成员函数的第一个参数(g++), MSVC的话由于是this call, 也没啥第一个不第一个

原来的this指针只是指向不能变, 当给成员函数加了const修饰以后, 就是传给函数的this指针指向的对象也不能变…所以就不能修改成员变量了

const修饰的对象

const修饰的对象, 不能调用非const的成员函数

CV限定符

C(const)
V(volatile)

  1. 在C++中,非成员函数不能含有CV限定
  2. 在C++中,静态成员函数不能有CV限定