struct的数组成员的默认值

时间:2011-07-11 15:00:47

标签: c++ arrays constructor struct initialization

  

可能重复:
  Intitialzing an array in a C++ class and modifiable lvalue problem

this问题所示,可以给一个结构提供一个ctor,使其成员获得默认值。您将如何继续为结构内的数组的每个元素提供默认值。

struct foo
{
   int array[ 10 ];
   int simpleInt;
   foo() : simpleInt(0) {}; // only initialize the int...
}

是否有某种方法可以在一行中创建类似于初始化int的方法?

4 个答案:

答案 0 :(得分:6)

新的C ++标准有一种方法可以做到这一点:

struct foo
{
   int array[ 10 ];
   int simpleInt;
   foo() : array{1,2,3,4,5,6,7,8,9,10}, simpleInt(0) {};
};

测试:https://ideone.com/enBUu

如果你的编译器还不支持这种语法,你总是可以分配给数组的每个元素:

struct foo
{
   int array[ 10 ];
   int simpleInt;
   foo() : simpleInt(0)
   {
        for(int i=0; i<10; ++i)
            array[i] = i;
   }
};
编辑:2011年之前的单行解决方案C ++需要不同的容器类型,例如C ++ vector(无论如何是首选)或boost数组,可以是boost.assign'ed

#include <boost/assign/list_of.hpp>
#include <boost/array.hpp>
struct foo
{
    boost::array<int, 10> array;
    int simpleInt;
    foo() : array(boost::assign::list_of(1)(2)(3)(4)(5)(6)(7)(8)(9)(10)),
            simpleInt(0) {};
};

答案 1 :(得分:4)

将数组更改为std :: vector将允许您进行简单的初始化,并且您将获得使用向量的其他好处。

#include <vector>
struct foo
{
  std::vector<int> array;
  int simpleInt;
  foo() : array(10, 0), simpleInt(0) {}; // initialize both
};

答案 2 :(得分:2)

如果您只想默认初始化数组(将内置类型设置为0),您可以这样做:

struct foo
{
   int array[ 10 ];
   int simpleInt;
   foo() : array(), simpleInt(0) { }
};

答案 3 :(得分:1)

#include <algorithm>

struct foo
{
  int array[ 10 ];
  int simpleInt;
  foo() : simpleInt(0) { std::fill(array, array+10, 42); }
};

或使用std::generate(begin, end, generator);生成器取决于您。