ere*_*eOn 7 c++ const-cast undefined-behavior
如果我做:
const char* const_str = "Some string";
char* str = const_cast<char*>(const_str); // (1)
str[0] = "P"; // (2)
Run Code Online (Sandbox Code Playgroud)
哪个(哪一行)确实是未定义的行为?
我一直在搜索这个问题,但没有找到任何明确而准确的答案(或者至少没有我能理解的答案).
还相关:如果我使用提供这种功能的外部库:
// The documentation states that str will never be modified, just read.
void read_string(char* str);
Run Code Online (Sandbox Code Playgroud)
可以写下这样的东西:
std::string str = "My string";
read_string(const_cast<char*>(str.c_str()));
Run Code Online (Sandbox Code Playgroud)
因为我知道肯定read_string()会从未尝试写str?
谢谢.
第(2)行具有未定义的行为.编译器可以自由地将常量放在只读存储器中(在Windows中曾经是一个"数据段"),因此写入它可能会导致程序终止.或者它可能不会.
当调用一个定义不明确的库函数(非const参数,应该是const)时,必须抛弃const-ness,唉,并不罕见.做,但抓住你的鼻子.
| 归档时间: |
|
| 查看次数: |
1016 次 |
| 最近记录: |