const in c
一直不太知道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)
- 在C++中,非成员函数不能含有CV限定
- 在C++中,静态成员函数不能有CV限定