[英]Remove const-ness from a variable
我试图从变量(char *)中删除const-ness,但由于某种原因,当我尝试更改值时,const变量的原始值仍然保持不变。
const char* str1 = "david";
char* str2 = const_cast<char *> (str1);
str2 = "tna";
现在str2的值发生了变化,但是str1的原始值保持不变,我在谷歌上查了一下,却找不到明确的答案。
当使用const_cast并更改值时,const变量的原始值是否也会发生变化?
str1
的类型是const char*
。 这是char
是const
,而不是指针。 也就是说,它是一个指向const char
的指针。 这意味着你不能这样做:
str1[0] = 't';
这将改变其中一个const
char
的值。
现在,当你做str2 = "tna";
时你正在做什么str2 = "tna";
正在改变指针的值。 没关系。 你只是将str2
改为指向不同的字符串文字。 现在str1
和str2
指向不同的字符串。
有了您的非const
指针str2
,你可以做str2[0] = 't';
- 但是,你有未定义的行为。 您无法修改最初声明为const
。 特别是,字符串文字存储在只读存储器中,试图修改它们会给你带来可怕的不幸。
如果要获取字符串文字并安全地修改它,请使用它初始化数组 :
char str1[] = "david";
这会将字符串文字中的字符复制到char
数组。 然后你可以根据自己的喜好修改它们。
str2
只是一个指针。 而你的代码只是更改指针的值,地址,而不是它指向的字符串。
更重要的是,您尝试执行的操作会导致未定义的行为 ,并且很可能会导致运行时错误。 所有现代编译器都会将您的字符串"david"
存储在只读内存中。 尝试修改该内存将导致内存保护错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.