C++ 类包含字符串-我可以跳过初始化它们吗?如果可以,如何跳过?

C++ 类包含字符串-我可以跳过初始化它们吗?如果可以,如何跳过?,c++,string,dynamic,class-members,C++,String,Dynamic,Class Members,快乐的程序员 我有一个计划,今天要学习一些C++,所以我认为我可以从以前的课程中提取一个旧的C赋值,而C++中也同样做。任务是读取音乐文件,从他们的ID3标签中检索数据,并根据他们的艺术家、专辑和曲目标题等在文件夹中排序。。。这其实并不重要,但你至少知道我要干什么 所以我玩了一些集合,让我的程序接收到一个字符串数组,指定不同的歌曲,它将循环算法 在下一步中,由于我试图复制旧C程序的行为,我陷入了困境,该程序是一个包含以下三个值的结构: int size; char *tag_name; char

快乐的程序员

我有一个计划,今天要学习一些C++,所以我认为我可以从以前的课程中提取一个旧的C赋值,而C++中也同样做。任务是读取音乐文件,从他们的ID3标签中检索数据,并根据他们的艺术家、专辑和曲目标题等在文件夹中排序。。。这其实并不重要,但你至少知道我要干什么

所以我玩了一些集合,让我的程序接收到一个字符串数组,指定不同的歌曲,它将循环算法

在下一步中,由于我试图复制旧C程序的行为,我陷入了困境,该程序是一个包含以下三个值的结构:

int size;
char *tag_name;
char *data;
<>但我至今无法重现C++中的动态行为,我只希望成员定义但不初始化,因为我希望以后能够更改这些数据。从技术上讲,我可以在创建标记之前从文件中获取数据,从而为构造函数提供它们的初始值并使用它来完成。但是我能用我想要的方式做吗

class Tag {
 public:
   std::string name;
   std::string data;
   int size;

   Tag() {}
   Tag(std::string n, std::string d, int s) : name(n), data(d), size(s) { }
   void setData(std::string data) { this.data = data }
};
由于我已经尝试了10亿个指针和谷歌加载之类的组合,所以我回到上面,决定问你如何真正实现这一点

<我的大脑完全被捣碎了,但是考虑上面的密码,因为我敢打赌这是不正确的……

所以我的问题是:
如何定义类以便为成员名称和数据获得动态字符串分配?我几乎想用一些好的老字符*,但我尝试的目的是学习一些C++,所以我强迫自己现在通过这个。

< P>如果我正确地理解了你的问题,你的默认构造函数已经处理好了。您的std::strings将初始化为空字符串。您可以为其指定不同的值 任何时候都可以使用此字符串

如果您真的愿意,可以将默认构造函数更改为

Tag() : name(""), data(""), size(0) {}

如果我正确理解了您的问题,您的默认构造函数已经解决了这个问题。您的std::strings将初始化为空字符串。您可以为其指定不同的值 任何时候都可以使用此字符串

如果您真的愿意,可以将默认构造函数更改为

Tag() : name(""), data(""), size(0) {}

在C++中,您可以随时更改字符串,实际上不需要这样做。也许您可以显示实际的代码?我目前对您的包含列表中可能缺少的代码表示怀疑。@BWG如果我通过添加内容来更改此字符串,会对内存和时间复杂度产生怎样的影响?它是像链表一样工作还是像C中的char[]一样工作?“意义再分配”必须发生吗?“西蒙的C++规则基本上是,不用担心。我假设std::string只有一个内部字符数组,所以没有链表。不过,不要担心字符串的性能。在C++中,您可以随时更改字符串,实际上不需要这样做。也许您可以显示实际的代码?我目前对您的包含列表中可能缺少的代码表示怀疑。@BWG如果我通过添加内容来更改此字符串,会对内存和时间复杂度产生怎样的影响?它是像链表一样工作还是像C中的char[]一样工作?“意义再分配”必须发生吗?“西蒙的C++规则基本上是,不用担心。我假设std::string只有一个内部字符数组,所以没有链表。不过,不要担心字符串的性能。你们真的应该确保至少初始化sizeI。我想我只是让自己和你们更困惑了。因为是的。。我想得太多了。但是是的,你是对的,但不是,我有另一个问题,但BWG已经为我澄清了它,所以我想如果可能的话,我会删除这篇文章,因为我的问题与我真正想要的相比没有意义。。。直到我问了之后我才知道。。。有点谢谢你!你真的应该确保至少初始化sizeI我只是把我自己和你们搞糊涂了。因为是的。。我想得太多了。但是是的,你是对的,但不是,我有另一个问题,但BWG已经为我澄清了它,所以我想如果可能的话,我会删除这篇文章,因为我的问题与我真正想要的相比没有意义。。。直到我问了之后我才知道。。。有点谢谢你!