下面是我写的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 ++中是不是一样的东西?
谢谢,
答案 0 :(得分:0)
MyString s2 = "cdf"
这样做将s2等同为具有值“cdf”的字符串文字。但这是错误的,因为MyString
是您自己的数据类型,并且您将其等同于char *
类型的变量。
如果要在初始化时使用等号,则需要执行以下操作:
MyString s2 = MyString(std::string("cdf"));
这将使用参数作为字符串“cdf”调用构造函数,并将对象复制到s2。
字符串和字符完全不同! String是派生数据类型,是C ++标准库的一部分,而char
只是一个字符数组。在这里阅读string
:
http://www.cplusplus.com/reference/string/string/