c++ - const_cast c++ 对我不起作用

标签 c++ casting constants

试图理解 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/

相关文章:

ios - 如何在 Objective-C 中转换一个间接指针

python - 使用 Python Enum 或 Dictionary 映射常量并通过推理保持 DRY 的最佳方法

c++ - 来自 cudaMemcpy2D 的错误数据

c# - 如何在数组中找到一个项目,该项目之前所有值的总和是特定值? (C++ 和 C#)

java - 在使用泛型参数调用方法时,有什么方法可以避免类型转换?

c++ - 如何包装模板函数以处理 const 和非常量数据

c++ - 指向常量的指针

c++ - 链接静态库的未解析符号

c++ - 计算多个整数的位...有更快的方法吗?

java - 如何在 Kotlin 中检查数组类型(不是泛型类型)