c++ const全局对象是如何处理的
我主要是记录一个发现,目前我不能解释,先作个记录。
const 只是一个 语义约束,由编译器强制实施的。使被约束的对象不能被直接访问修改。
我用 『直接』这词,因为在代码段中 ,用一个const 指针指向该对象,然后再用const_cast<T*>去掉 const限定,就能通过得到的non-const指针修改了。
但是!!我测试发现。
若是一全局的const对象,则该法不能奏效,(static局部对象我也测试了)编译依然没Error,但程序运行直接崩溃。
也就是说,对于,存储在 栈 中的对象,他没有区分有无const之分,const仅仅只是一个编译器层面的约束。(这也符合之前的理解)
但对于 Data Segment(存储 全局,static局部对象) ,我之前以为也向栈中一样没有区分,
但测试结果表明,他区分了有无const,并且在程序加载时,将 const标记的送到一个特别的内存区域,亦或 通知 OS这块内存不能修改?
以上是我目前的猜测,先作记录。
同样的, 字符串 常量,也是存储在 数据段中的,所以,通过指针修改也会导致 程序崩溃。