gpt4 book ai didi

c++ - typedef 中 C 风格数组的维度

转载 作者:太空狗 更新时间:2023-10-29 20:23:11 24 4
gpt4 key购买 nike

我有一个关于 C++ 中 C 风格数组维度的问题。在使用声明/typedef 时,当使用多个维度时,维度看起来很奇怪。例如:

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 是一个长度为 4 的 A1 对象数组。

using A1 = int[23];

A1 是一个长度为 23 的 int 数组。所以 A2 的类型是长度为 4 的数组,长度为 23 int,或 int[4][23]

关于c++ - typedef 中 C 风格数组的维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34253867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com