从变量中删除const-ness

Dav*_*aiz 9 c++ casting const const-cast

我试图从变量(char*)中删除const-ness,但由于某种原因,当我尝试更改值时,const变量的原始值仍然保持不变.

 const char* str1 = "david";
 char* str2 = const_cast<char *> (str1);
 str2 = "tna";
Run Code Online (Sandbox Code Playgroud)

现在str2的值发生了变化,但是str1的原始值保持不变,我在谷歌上查了一下,却找不到明确的答案.

当使用const_cast并更改值时,const变量的原始值是否也会发生变化?

Jos*_*eld 10

类型str1const char*.就是char那个const,而不是指针.也就是说,它是指针const char.这意味着你不能这样做:

str1[0] = 't';
Run Code Online (Sandbox Code Playgroud)

这将改变其中一个的价值const char.

现在,你正在做的str2 = "tna";是改变指针的值.没关系.你只是改变str2指向不同的字符串文字.现在str1,str2并指向不同的字符串.

使用非const指针str2,您可以这样做str2[0] = 't';- 但是,您有未定义的行为.您无法修改最初声明的内容const.特别是,字符串文字存储在只读存储器中,试图修改它们会给你带来可怕的不幸.

如果要获取字符串文字并安全地修改它,请使用它初始化数组:

char str1[] = "david";
Run Code Online (Sandbox Code Playgroud)

这会将字符串文字中的字符复制到char数组中.然后你可以根据自己的喜好修改它们.