C++ 使用指针作为构造函数参数进行类初始化
C++ Class initialization with pointer as constructor param
下面是我写的一个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/
相关文章:
- C++转换参数初始化问题
- 在构造函数中使用可变参数初始化 std::tuple
- 类模板专用化演绎是否应该考虑演绎指南参数初始化?
- 如何通过参数初始化构造函数中的数组?
- 在模板类中使用"this"会导致参数初始化错误
- 如何使用一些参数初始化动态分配的数组中的对象
- 使用模板参数初始化静态 const 成员
- 基于模板参数初始化静态字符
- 使用参数初始化
- 使用参数包参数初始化"std::array"
- 从按值构造函数参数初始化的引用成员
- 使用派生的[C++]生成的参数初始化基类
- 一个C++默认参数可以用另一个参数初始化吗
- 如何用功能指针作为参数初始化静态成员的模板
- 用参数初始化另一类构造函数中的对象
- C :如何通过其构造函数的参数初始化类内部矩阵的尺寸
- C++:基于构造函数参数初始化向量
- 正在使用模板参数初始化stl类
- 如果类 A 修改其构造参数,我可以使用常量参数初始化 const A 吗?
- 使用结构非类型可变参数模板参数初始化结构的字符串数据成员