繁体   English   中英

从变量中删除const-ness

[英]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* 这是charconst ,而不是指针。 也就是说,它是一个指向const char的指针。 这意味着你不能这样做:

str1[0] = 't';

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

现在,当你做str2 = "tna";时你正在做什么str2 = "tna"; 正在改变指针的值。 没关系。 你只是将str2改为指向不同的字符串文字。 现在str1str2指向不同的字符串。

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

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

char str1[] = "david";

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

str2只是一个指针。 而你的代码只是更改指针的值,地址,而不是它指向的字符串。

更重要的是,您尝试执行的操作会导致未定义的行为 ,并且很可能会导致运行时错误。 所有现代编译器都会将您的字符串"david"存储在只读内存中。 尝试修改该内存将导致内存保护错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM