簡體   English   中英

typedef中C樣式數組的維度

[英]Dimensions of C-style arrays in typedefs

我對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]。 有誰知道為什么這樣的類型推斷? 我試圖在標准中找到解釋,但我想我看起來不夠努力。

有誰知道為什么這樣的類型推斷?

using A2 = A1[4];

A2A1對象的長度為4的數組。

using A1 = int[23];

A1int的長度為23的數組。 所以A2的類型是長度為4的長度為23 int數組,或int[4][23]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM