You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么C++不允许将const char*赋值给非const char*类型变量

问题代码
char* name;
const char* _name = "something";
name = _name; // C++ 中该转换不被允许
禁止该操作的核心设计原因
  • const语义的本质要求:const 修饰的指针代表了「不会通过该指针修改指向内容」的契约,如果允许把 const char* 隐式转为 char*,相当于可以随便绕开这个契约,通过非const指针修改原本被const保护的内容,直接破坏了C++类型系统的安全性,这种漏洞当然是不被允许的。
  • 字符串字面量的只读特性:代码里的 "something" 属于字符串字面量,编译后默认会被放在程序的只读数据段,运行时本身就不允许修改。如果放开非const指针指向它的限制,后续不小心修改指针指向内容就会直接触发运行时段错误,C++选择把这个风险提前到编译阶段拦截,比运行时崩溃更容易定位问题。

需要额外说明的是,早期C语言是允许这种隐式转换的,属于历史遗留的兼容设计,但C++从诞生起就更重视类型安全,直接从语法层面禁止了这种不安全的隐式转换。就算你通过强制类型转换硬把const char*转为char*骗过编译器,后续修改字符串字面量的操作依然是未定义行为,绝大多数场景下都会导致程序崩溃。

内容的提问来源于stack exchange,提问作者Hashnut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 08:27:00