问题描述
- 关于const_cast的相关问题
-
const char *pc; char *p =const_cast<char *> (pc); //正确:但是通过p写值是未定义的行为
这里很奇怪,既然改变运算对象的底层const,不就是为了给它写值么,为什么反而是未定义的行为,感觉好多余。
解决方案
pc 是 const,但 p 不是 const。
这就是 C 语言指针使用的问题:将指针指向一个 const 的对象,能修改数据,这时编译器不会认为是错误的。
解决方案二:
const char *pc = ""Hello;
char *p = const_cast(pc);
如果楼主的代码是说这样的话,下面可以帮助你理解为什么?
解释:你理解了const_cast<>强制类型转换的机制但是没有理解char *pc 与char pc[]的区别。
const char *pc;这句话将pc指向的是一个字符串常量,并且指针的类型也是const char类型;
经过char *p = const_cast(pc);后,char *p指向的内容同样也是字符串常量“Hello”,常量是不能更改的。
而如果改成下面的就行了:
const char pc[] = "Hello";
char *p = const_cast(pc);
p[0] = 'J';
时间: 2024-11-17 09:16:25