C++ const_cast

用法:const_cast(expression)

通过const_cast运算符,只能将const type转换为type,将const type&转换为type&。

例子1:

void f(int *p){}
int main() {
    const int a=1;
    const int* const_p = &a;
    f(const_p);
}
// f(const_p)报错无法将参数 1 从“const int *”转换为“int *”

例子2:

void f(int *p){}
int main() {
    const int a=1;
    const int* const_p = &a;

    f(const_cast<int*>(const_p));
    f(const_cast<int*>(&a));
}
// f(const_cast<int*>(const_p));  f(const_cast<int*>(&a));
// 都是可以编译通过的

出于无奈,C++提供const_cast转换类型来适配函数。


C++ primer 原话是“如果常量本身不是常量,获得的权限是合法的, 如果本身是常量,使用const_cast再写的后果是未定义的。”

const int constant = 22;
const int* const_p = &constant;
int* modifier = const_cast<int*>(const_p);
*modifier = 23;
std::cout << constant << std::endl;
std::cout << *modifier << std::endl;
// 输出22 23

int constant = 22; // 这里的区别
const int* const_p = &constant;
int* modifier = const_cast<int*>(const_p);
*modifier = 23;
std::cout << constant << std::endl;
std::cout << *modifier << std::endl;
// 输出23 23

const_cast的目的并不是为了让你去修改一个本身被定义为const的值,因为这样做的后果是无法预期的。

const_cast的目的是修改一些指针/引用的权限,如果我们原本无法通过这些指针/引用修改某块内存的值,现在你可以了。


结论:const_cast的目的:转换类型,而不是修改值。

posted @   天下太平  阅读(191)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示