0

我有一个类字段

char chars[4]

我想在构造函数中初始化这个字段。
我的构造函数需要char chars[]作为参数获取,并且在构造函数调用中我想初始化我的类字段。
我可以这样做还是我需要打电话给副本?

4

5 回答 5

5

像这样使用std::copy

class MyClass
{
    char m_x[4];    
public:
    MyClass(const char (&x)[4])
    {
        std::copy(x, x + 4, m_x);
    }
};

您应该在这里明确说明您的类型,以强制您准确传递 4 个元素。

于 2012-08-08T14:41:41.540 回答
3

您需要调用副本。

MyClass::MyClass(const char* param)
{
  std::copy(param, param + 4, chars);
}

这是一个有点风险的代码,因为不能保证 param 有四个字符要复制。

于 2012-08-08T14:31:50.823 回答
2

另一种方法是使用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_;
};

请参阅http://ideone.com/hhoaC上的演示。

于 2012-08-08T14:39:24.653 回答
-1

据我了解,您需要创建Conversion constructors,它应该如下所示: A::A(const char* string) {strncpy(chars, string, 4); }

于 2012-08-08T14:37:23.170 回答
-2

是的。您需要从输入参数中复制内容。

于 2012-08-08T14:35:33.757 回答