const_cast:对一个表达式添加或者移去const类型
static_cast:用于将一个基类型的指针或者引用转换为子类的指针或引用。
reinterpret_cast:与static_cast在强制转基类指针到子类指针时的区别是--reinterpret只是假装基类指针是一个子类指针而不改变它的值二static_cast则会执行正确的地址操作。
dynamic_cast:典型的特别的应用于安全的向下类型转化(基类指针转到子类指针)。它仅仅在多态类才会起作用,也就是基类必须有虚函数,并且这种强制转换会在运行期间监测这种转换是否正确(淡然这种安全机制需要一定消耗)。
10.常成员函数的意义(meaning of a const member function)
this指针在非常成员函数中的类型是X* const(X是类名,const ptr)
this指针在常成员函数中的类型是const X* const(const ptr to const obj),因为this指向的对象是常量,所以this指向的对象不能被修改。
如果想在常成员函数中修改成员变量有两种解决方法:
方法一、常成员函数内强制转换this指针
X* const athis = const_cast<X* const>(this);
athis->somemember=...;
方法二、将可以在常成员函数中修改的成员变量生命为 mutable类型
class X
{
private:
mutable int valueA;
public:
int getValue() const
{
valueA++;
return valueA;
}
};