typedef 中 C 风格数组的维度
Dimensions of C-style arrays in typedefs
我对 C++ 中 C 风格数组的维数有疑问。在使用 declarations/typedefs 时,使用多于一个维度时维度看起来很奇怪。例如:
using A1 = int[23]; //! << A1 = int[23]
using A2 = A1[4]; //! << A2 = int[4][23]
std::cout << std::is_same<int[23][4], A2>::value << std::endl; //false
std::cout << std::is_same<int[4][23], A2>::value << std::endl; //true
我以为A2的类型应该是int[23][4]而不是int[4][23]。在下面的代码片段中观察到相同的行为:
template<typename T>
struct ArrayTest;
template<typename T, size_t N>
struct ArrayTest<T[N]>
{
using type = T;
};
ArrayTest<int[23][2][45]>::type A3; //! T is int[2][45], N is 23
在这个例子中,我认为类型是 int[23][2] 而不是 int[2][45]。
有谁知道为什么要这样推导类型?我试图在标准中找到解释,但我想我还不够努力。
Does anyone know why the types are deduced like this?
using A2 = A1[4];
A2
是 A1
个对象的长度为 4 的数组。
using A1 = int[23];
A1
是int
的长度为23的数组。所以 A2
的类型是长度为 4 的数组,长度为 23 int
,或者 int[4][23]
.
我对 C++ 中 C 风格数组的维数有疑问。在使用 declarations/typedefs 时,使用多于一个维度时维度看起来很奇怪。例如:
using A1 = int[23]; //! << A1 = int[23]
using A2 = A1[4]; //! << A2 = int[4][23]
std::cout << std::is_same<int[23][4], A2>::value << std::endl; //false
std::cout << std::is_same<int[4][23], A2>::value << std::endl; //true
我以为A2的类型应该是int[23][4]而不是int[4][23]。在下面的代码片段中观察到相同的行为:
template<typename T>
struct ArrayTest;
template<typename T, size_t N>
struct ArrayTest<T[N]>
{
using type = T;
};
ArrayTest<int[23][2][45]>::type A3; //! T is int[2][45], N is 23
在这个例子中,我认为类型是 int[23][2] 而不是 int[2][45]。 有谁知道为什么要这样推导类型?我试图在标准中找到解释,但我想我还不够努力。
Does anyone know why the types are deduced like this?
using A2 = A1[4];
A2
是 A1
个对象的长度为 4 的数组。
using A1 = int[23];
A1
是int
的长度为23的数组。所以 A2
的类型是长度为 4 的数组,长度为 23 int
,或者 int[4][23]
.