gpt4 book ai didi

C++ const 字符串文字和自定义字符串类

转载 作者:行者123 更新时间:2023-11-30 05:38:09 25 4
gpt4 key购买 nike

在 C++ 中,字符串字面量“Hello”是常量并且是不可变的。我想制作一个自定义字符串类,其字符串不是 const 字符,因此它们可以更改

这是一段代码,可以说明我正在尝试做的事情:

#include <iostream>

class String {
public:
char * p_start;

String(char * strSourc) // Constructor
{
p_start = strSourc;
}
};

int main()
{
String myString("Hello");
// Create object myString, send "Hello" string literal as argument

std::cout << myString.p_start << std::endl;
// Prints "Hello"

*myString.p_start = 'Y';
// Attempt to change value at first byte of myString.p_start

std::cout << myString.p_start << std::endl;
// Prints "Hello" (no change)

myString.p_start = "Yellow";
// Assigning a string literal to p_start pointer

std::cout << myString.p_start << std::endl;
// Prints Yellow, change works. I thought myString "Hello" was const chars, immutable

return 0;
}

所以,我很困惑。我到处都看过,它说字符串文字,如“Hello”,是不可变的,它们的每个字符字节都是不可更改的。尽管我设法将 Yellow 分配给 p_start 指针,但改变了第一个字母。尽管通过取消引用 H 指针将单个字母 H 更改为 Y 没有做任何事情。

任何见解都会对我有所帮助,谢谢。

最佳答案

我认为您混淆了pointerpointee

p_start = "Yellow",您正在更改指针的值,使其指向“黄色”。 *p_start = 'Y',您正在更改 pointee 的值,p_start 指向的内容,而不是它本身。正如您所说,“黄色”是常量字符,因此尝试修改它们的行为是 UB。

你可以在ctor中复制它,然后你可以修改由类管理的字符。是的,这将是一个新拷贝,但不会浪费内存。如果您希望它们可变,您别无选择。

关于C++ const 字符串文字和自定义字符串类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32920021/

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