C++ 使用指针作为构造函数参数进行类初始化

C++ Class initialization with pointer as constructor param

本文关键字:参数 初始化 构造函数 指针 C++      更新时间:2023-10-16

下面是我写的一个C++类,

class MyString:public string{
  public:
  MyString(string s):string(s){}
};
int main()
{
  MyString s1("abc");
  MyString s2 = "cdf";
  return 0;
}

在上面的代码中,My String s2 = "cdf"行无法编译,但是如果我将 MyString 类的构造函数参数更改为 public:MyString(const char s[]):string(s){},那么此行将编译。为什么?字符串和字符[]在C++不是一回事吗?

谢谢

MyString s2 = "cdf"

这样做将 s2 等同于具有值"cdf"的字符串文字。但这是错误的,因为MyString是您自己的数据类型,并且您将其等同于类型 char * 的变量。

如果要在初始化时使用等号,则需要执行以下操作:

MyString s2 = MyString(std::string("cdf")); 

这会使用字符串"cdf"调用参数的构造函数,并将对象复制到 s2。

字符串和字符完全不同!字符串是一种派生数据类型,是C++标准库的一部分,而char只是一个字符数组。在此处阅读有关string的信息:http://www.cplusplus.com/reference/string/string/