0

将其转换为有效的 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
4

2 回答 2

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}},我认为最好只按名称设置值。

于 2013-06-09T09:18:58.537 回答
2

这段代码

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

-pedantic使用开关编译 g++ 和 clang++ 。大括号初始化是在 C++11 中引入的,主要与 C99 兼容。

于 2013-06-09T09:19:51.900 回答