您的位置:首页 > 编程语言 > C语言/C++

C++强制类型转换const_cast()注意事项

2015-04-09 17:28 351 查看
const_cast<>() 只能通过引用或指针来取消所指向的const变量的const属性。

比如

这句话就编译不通过。

但是改成指针形式就可以了。如下:

或者改成引用形式。引用有两种方式都成立,但是意义却不同:

第一种方式b是一个新的int变量,结果不和a联动。

第二种方式b是a的引用,结果是和a联动的。

但是——最关键的部分来了,如果const int a = 0;这句话是这么定义的,那么即使b和a就理论上来说应该是联动的,但事实上b和a还是不联动的。虽然这时有&b = &a(这里就指针的形式int *b = const_cast<int*>(&a);来说)仍然如此。也就是说如果写一条语句b = 1;打印b的值为1,而打印a的值还是为0。这是为什么呢?这是因为编译器在编译的时候就把a的值用字面值常量0取代了。

那么怎么解决这个理论上应该取消了const属性的const变量却不能修改其值的问题呢?

如果把const int a = 0;这句话改为如下内容:

这下问题迎刃而解。修改b就和修改a一样了。

有人说的好,C++的语言设计者是如此的纠结,明明前面定义了const的变量就是为了防止修改,却又为了给自己一条反悔的后路不惜祭出const_static,其他语言都没有这种玩意儿,不过这也有力说明了C++是多么灵活的语言。

综上所述,const_static还是慎用为好
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐