主要写const两个用法:const & pointer, const function
const pointer
两种:
-
const int* ptr
: 指针指向的地址的memory内的值是const, 不能被修改 -
int* const ptr
: 指针本身是const,不能修改指向的memory
e.g. 从下面的例子开始; 注意到第14行: (int*)&MAX_AGE
: bypass const int MAX_AGE
如果const int* ptr
: 那么ptr
指向的memory所在的值不能修改:注意第13行:
如果int* const ptr
: 那么ptr
本身const,不能修改指向的memory:注意第14行:
const method
e.g. initially:
如果外部调用不让改变 line17: pass by reference作为参数传入的Entity& e
: 改为const Entity& e
,那么此时line18-19会报错:
- line18:因为声明为
const Entity
,但是在内部e = Entity()
给e重新赋值了,修改了e - line19: 因为调用的
getX
方法并没有限制我们修改Entity的member variables, 但其实应该有
此时在方法名后面加上const: int getX() const
: 那么就表明外界调用这个方法不能修改成员变量值,就不报错了:
此外,方法声明为const, 在外界声明这个类的一个const对象,能调用这个const方法,否则不能调用
如果非得在const method中修改变量值:mutable
:
class Entity {
private:
int m_X, m_Y;
mutable int var;
public:
int getX() const {
var = 2;
return m_X;
}
void setX(int x) {m_X = x;}
};
mutable : つづく