1. 为了逻辑上的优化需要,const成员函数可能想修改某些成员变量,把这些成员变量定义为mutable可以绕过const的检查
2. 调用const和non-const的参数的函数可以重载
3. static_cast<const T&>(a) 将一个非const 对象转成一个const 对象
4. const_cast<T&> 将一个const对象转成非const 对象,const_cast只能放置T& 或T*