使用字符串文字分配字符数组类成员

问题描述

如果我像这样创建我的类:

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]{}; 的方式,但唯一的选择是使用动态内存。还有比这两个更好的选择吗?

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

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

解决方法

根据评论中的建议,您可能会同意:

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...