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的目的:转换类型,而不是修改值。
分类:
C/C++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通