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

时间:2016-03-19 08:34:02

标签: c++ string char

下面是我写的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){},则此行将进行编译。这是为什么?字符串和char []在C ++中是不是一样的东西?

谢谢,

1 个答案:

答案 0 :(得分:0)

MyString s2 = "cdf"

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

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

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

这将使用参数作为字符串“cdf”调用构造函数,并将对象复制到s2。

字符串和字符完全不同! String是派生数据类型,是C ++标准库的一部分,而char只是一个字符数组。在这里阅读stringhttp://www.cplusplus.com/reference/string/string/