直接结构初始化

时间:2013-06-08 23:48:54

标签: c++ c++11 struct

将此转换为有效的C ++ 11语句的最简单方法是什么?

typedef struct S_NODE {
  short int total;
  short int move[3];
  int next[3];
} NODE;

NODE* trie = (NODE *)malloc(sizeof(NODE));
trie[0]=(NODE){0,{0,0,0},{-1,-1,-1}}; // invalid C++

我能想到的唯一方法是

NODE node = {0,{0,0,0},{-1,-1,-1}};
trie[0]=node;

但是不能将节点重新用作临时变量:

node = {1,{3,3,7},{1,2,3}};  // doesn't compile

2 个答案:

答案 0 :(得分:2)

我从这开始:

struct NODE {
  short int total;
  std::array<short int, 3> move;
  std::array<int, 3> next;

  NODE()
  : total(0) {
    move.fill(0);
    next.fill(-1);
  }
};

NODE trie; // everything is initialized automatically

负责默认初始化。至于在node = {1,{3,3,7},{1,2,3}}中分配大块魔术常量,我认为最好只按名称设置值。

答案 1 :(得分:2)

此代码

trie[0] = {0, {0, 0, 0}, {-1, -1, -1}}; 

使用-pedantic开关同时编译g ++和clang ++。在C ++ 11中引入了Brace初始化,它主要与C99兼容。