1.const
#include<iostream>
int main(void)
{
//const 定义常量 ---> const 意味只读,不能修改。
const int a;
int const b;
//第一个 第二个意思是一样的,代表一个常整形数,不能修改。
const int *c; //*c 代表一个指针,指向常整形,不能修改, c 能指向任意整形变量,可以修改。
//第三个 c是一个指向常整形数的指针(所指向的内存数据不能被修改,但是本身可以修改)。
int * const d; //d 不能修改,*d能改。
//第四个 d是一个常指针(指针变量不能被修改,但是它所指向的内存空间可以被修改)。
const int * const e;
//第五个 e是一个常指针,指向常整形,不能修改,*e 也不能修改 。
return 0;
}
总结:左数右常(左右是 const 针对于 * 而言的)
2.mutable
可变数据成员
在了解const之后,必然会有小伙伴问:有没有办法既定义一个const类对象,又可以修改类中的某些变量,比如计数该函数被调用多少次?
当然可以,C++已经为你考虑好了如何解决此类问题。
答案就是使用关键字 mutable。
使用mutable修饰的成员数据,称作可变数据成员(mutable data member)。
1.mutable的使用
看个例子你就懂了:
class MyClass {
private:
mutable size_t access_ctr;
public:
void some_mem_fun() const {
++access_ctr;
}
};
虽然some_mem_fun 被申明为const,但是可以修改本类中的mutable成员数据 access_ctr。
2.总结
可以通过使用 mutable 关键字来修改被const修饰的数据。除非必要,否则不要使用!