【问题标题】:Assign a char array class member using string literal使用字符串文字分配 char 数组类成员
【发布时间】:2021-06-08 18:21:48
【问题描述】:

如果我这样创建我的课程:

class MyCLass {
private:
    char name[25]{};
public:
    MyClass();
    MyClass(char name[]);
};
MyClass::MyCLass() {
    stringCopy("", this->name);
}
MyCLass::MyClass(char name[]) {
    stringCopy(name, this->name);
}

其中stringCopy 是我复制两个字符数组的函数,当我在main 函数中创建对象MyClass obj("John"); 时,名称分配正确,但我收到以下警告:ISO C++11 does not allow conversion from string literal to 'char *',所以我问自己:将 char 数组初始化为类成员的正确和最佳方法是什么?

首先,我不喜欢我初始化char name[25]{}; 的方式,但唯一的选择是使用动态内存。还有比这两个更好的选择吗?

另外,虽然我在编译代码后得到的消息只是一个警告,但我宁愿避免在我的代码中出现这种潜在的冲突。除了使用名称创建一个 char 数组,然后创建一个对象并将这个新变量作为参数传递之外,还有其他方法可以避免这个问题吗?

编辑:我错过了那个细节:我需要使用 char 数组。不允许使用任何字符串。

【问题讨论】:

  • 构造函数MyCLass::MyClass(char name[]) 需要是MyCLass::MyClass(const char name[])。字符串文字是 const char[]。
  • 在 C++ 中为您自己的理智使用 std::string。使用 C 字符串只不过是一团糟,尤其是在这种情况下,您的长度限制 (25) 没有在任何地方宣传,也没有记录在案,也不容易被发现。
  • 如果必须使用字符数组,请查看str*() 标准函数,例如stdcpy 和strcmp。否则使用std::string。
  • @tadman 我完全同意你的看法,但使用 cString 是这项任务的要求。此外,鼓励创建我自己的 stdcpy 函数。
  • @FrançoisAndrieux 这回答了我的一个问题。谢谢!

标签: c++ arrays class member chararray


【解决方案1】:

鉴于 cmets 中的建议,您可能会采取一些措施:

class MyCLass {
private:
    std::string name;
public:
    MyClass(std::string & n = ""):name(std::move(n)){};
};

在这种复制中使用StringCopy() 函数没有意义,标准库中的函数已经做得很好()

【讨论】:

  • 所有这些都可以解析为单个ctor,MyClass(std::string s = "") : name(std::move(s)) {}
猜你喜欢
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 2011-09-23
  • 1970-01-01
相关资源
最近更新 更多