试图理解 const_cast 的用法。代码如下:
const char* text="bb";
(const_cast<char&>(*text))='a';
cout<<*text;
...生成运行时错误。
另外一个问题,在内存中,runtime(它)如何知道这个区域是const还是not,这是一个什么样的flag?
最佳答案
该代码调用了未定义的行为;写入字符串文字是无效的(实际上也不是写入任何 const
对象)。
C++ 标准没有定义这应该如何失败(或者甚至它必须失败)。但在典型的平台上,将由操作系统和底层硬件来检测问题。 "bb"
的存储通常位于可执行文件的专用部分中,该部分被标记为只读。参见例如http://en.wikipedia.org/wiki/Memory_protection .
但是,const_cast
的使用不会调用未定义的行为。例如:
int x = 5; // Not a const object
const int *p = &x;
int *q = const_cast<int *>(p);
*q = 6; // This is ok
关于c++ - const_cast c++ 对我不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10303871/