C++中的const函数与const_cast的矛盾

作者:KE meng
链接:http://www.zhihu.com/question/19772701/answer/20426924
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

onst_cast的用法不是将一个const变量变成非const变量的.看一下标准就可以知道,
使用const_cast把一个原本是const的变量转换为非const,这是一个未定义行为.
所以楼主所说const_castthis->.....是非常非常危险的举动.

const_cast的目的,在于某些变量原本不是const的,但由于某种特殊原因,无意间被变成了const的,
例如使用了一个const引用指向了一个本来不是const的对象.结果写了一些代码之后发现它实际上需要被修改. 这在平时的工作中不会遇到因为你可以直接把const引用修改成非const的,但C++中可能的情况太多,尤其考虑到很多复用的时候,有时还是会出现本不该是const的对象被const引用了这种情况.尤其是使用模板,比较复杂的情况.
这才是const_cast的意义所在.

想了解const_cast使用中可能出现的未定义行为,可参考如下代码:

int main()
{
const int k=10;
int& x=const_cast<int>(k);
x=11;
return k;
}

这段代码中出现的就是典型的const_cast的未定义行为,return的值是完全不确定的,全看编译器
心情.而以下代码是正确的:

int main()
{
int k=10;
const int& ref=k;
int& x=const_cast<int>(ref);
x=11;
return k;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值