将此转换为有效的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
答案 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兼容。