gpt4 book ai didi

c++ - 从变量中删除 const-ness

转载 作者:可可西里 更新时间:2023-11-01 16:34:38 26 4
gpt4 key购买 nike

我正在尝试从变量 (char*) 中移除常量特性,但出于某种原因,当我尝试更改值时,常量变量的原始值仍然保持不变。

 const char* str1 = "david";
char* str2 = const_cast<char *> (str1);
str2 = "tna";

现在 str2 的值发生了变化,但 str1 的原始值保持不变,我已经在 Google 上查找但找不到明确的答案。

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

最佳答案

str1 的类型是const char*charconst,而不是指针。也就是说,它是指向 const char 的指针。这意味着你不能这样做:

str1[0] = 't';

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

现在,当您执行 str2 = "tna"; 时,您所做的就是更改指针的值。没关系。您只是将 str2 更改为指向不同的字符串文字。现在 str1str2 指向不同的字符串。

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

如果你想获取一个字符串文字并安全地修改它,用它初始化一个数组:

char str1[] = "david";

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

关于c++ - 从变量中删除 const-ness,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15358114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com