C++去常性转换

用法:const_cast< type_name >(expression) 说明:该算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, typename和expression的类型是一样的。

特点:(1) 用于去除变量的只读属性;(2)强制转换的目标类型必须是指针或引用。

int main()
{
    const int a=10;
    const int* pa=&a;
    const int& ra=a;
    int* p=const_cast(pa);//ok,去掉其指针常性
    int& r=const_cast(ra);//ok,去掉去引用常性
    int&& ra=const_cast(a);//ok,去掉常性并转换为右值
    int y=const_cast(a);//error,这样做没意义因为这和int y=10;没区别。在C++中,常变量在编译时会被替换为10
}

内置类型:

int main()
{
    const int a=10;
    int* p=const_cast(&a);
    cout<<&a<<"=>"<"<<*ip<"<"<<*ip<

结果:

 

原因就是在C++中,对于常变量在编译时会将其替换为值本身。

自己设计的类型:

class Int
{
    int value;
public:
	Int(int x=0):value(x){}
    ~Int(){}
    void SetValue(int x)
    {
        value=x;
    }
    int GetValue()const
    {
        return value;
    }
};
int main()
{
    const Int a(10);
    cout<(&a);
    Int& b=const_cast(a);
    p->SetValue(100);
    cout<

结果: C++去常性转换_第1张图片

 注意: 常量指针被转化成非常量的指针,并且仍然指向原来的对象;常量引用被转换成非常量的引用,并且仍然引用原来的对象。

你可能感兴趣的:(c++,开发语言)