问题描述
如果我像这样创建我的类:
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()
函数是没有意义的,标准库中的函数已经做得很好了 ()