我有一个类字段
char chars[4]
我想在构造函数中初始化这个字段。
我的构造函数需要char chars[]
作为参数获取,并且在构造函数调用中我想初始化我的类字段。
我可以这样做还是我需要打电话给副本?
我有一个类字段
char chars[4]
我想在构造函数中初始化这个字段。
我的构造函数需要char chars[]
作为参数获取,并且在构造函数调用中我想初始化我的类字段。
我可以这样做还是我需要打电话给副本?
像这样使用std::copy
:
class MyClass
{
char m_x[4];
public:
MyClass(const char (&x)[4])
{
std::copy(x, x + 4, m_x);
}
};
您应该在这里明确说明您的类型,以强制您准确传递 4 个元素。
您需要调用副本。
MyClass::MyClass(const char* param)
{
std::copy(param, param + 4, chars);
}
这是一个有点风险的代码,因为不能保证 param 有四个字符要复制。
另一种方法是使用vector<char>
可以在初始化列表中初始化的 a:
class A
{
public:
A(char* a): a_(a, a + strlen(a)) {}
private:
std::vector<char> a_;
};
请参阅http://ideone.com/x9p6I上的演示。
这可以制作成模板以支持不同的类型,但需要将数组中的元素数量提供给构造函数(因为strlen()
不适用于 的数组int
)。例如:
template <class T>
class A
{
public:
A(const T* a, const size_t count): a_(a, a + count) {}
private:
std::vector<T> a_;
};
据我了解,您需要创建Conversion constructors
,它应该如下所示:
A::A(const char* string)
{strncpy(chars, string, 4);
}
是的。您需要从输入参数中复制内容。