语言数组和std :: array初始化之间有什么区别?

时间:2013-02-22 14:20:48

标签: c++ arrays c++11 initialization

std :: array支持聚合初始化,但这里有什么问题?如果使用代码(1),则vc10.0和g ++ 4.7.2都会抱怨初始化程序太多。但是,如果我使用代码(2),一切都很好。

#include <array>

struct elem_t {  char c;  unsigned n;};

struct my_struct_t
{
  int i;
  // std::array<elem_t, 2> a; // (1) cause error
  // elem_t a[2]; // (2) ok
};

int main()
{
  std::array<int, 3> ai[] = {{1,2,3},{4,5,6}}; // ok

  my_struct_t var[] =
  {
    { 0, { {'a',1U}, {'b',2U}} }, // in question?
  };
}

1 个答案:

答案 0 :(得分:1)

尝试额外的大括号 - array本身需要一对额外的大括号:

my_struct_t var[] = { { 0, { { { 'a', 1 } } } }
                    , { 1, { { { 'c', 3 } } } }
};

//                  ^-  mystruct[]
//                     ^-  mystruct
//                         ^-  array
//                           ^-  elem_t[2]
//                             ^-  elem_t

大括号可以在顶层折叠,但这可能是不允许折叠的情况,或者编译器支持可能还没有。