typedef数组的typedef

use*_*939 19 c c++ arrays typedef multidimensional-array

由于标题可能看起来很混乱,让我举个例子:

typedef bool foo[2];
typedef foo bar[4];
bar what_am_i;
Run Code Online (Sandbox Code Playgroud)

那么,我认为是what_am_i一个[4][2]维数组,还是一个[2][4]维数组?

Sha*_*ang 21

这是bool[4][2] 你可以通过static_assert验证:

static_assert(std::is_same<decltype(what_am_i), bool[4][2]>::value, "");
static_assert(std::is_same<decltype(what_am_i), bool[2][4]>::value, ""); // failed
Run Code Online (Sandbox Code Playgroud)


son*_*yao 13

foo是一个包含2类型元素的数组bool,即bool[2].

bar是一个包含4类型元素的数组foo,即foo[4]每个元素都是一个bool[2].

然后what_am_ibool[4][2].


bar*_*nos 6

为了完成@Slardar Zhang对C的C++答案:

是的bool[4][2].

您可以通过以下任一方式验证它:

  • sizeof(what_am_i)/sizeof(*what_am_i) == 4
  • sizeof(*what_am_i)/sizeof(**what_am_i) == 2


use*_*939 3

通过调试器检查变量后,我发现我是对的——what_am_i是一个[4][2]维数组。