我想了解类型衰减的性质。例如,我们都知道数组在特定的上下文中衰变成指针。我的尝试是了解int[]
等于int*
但二维数组如何与预期的指针类型不匹配。下面是测试情况:为什么int * []衰减为int **而不是int [] []?
std::is_same<int*, std::decay<int[]>::type>::value; // true
此预期返回true,但这并不:
std::is_same<int**, std::decay<int[][1]>::type>::value; // false
为什么这是不是真的?我终于找到了一种方法,使其返回true,这是通过使第一维指针:
std::is_same<int**, std::decay<int*[]>::type>::value; // true
和断言的任何类型的指针,但最后被数组也是如此。例如(int***[] == int****; // true
)。
我可以解释为什么会发生这种情况吗?为什么数组类型不像预期的那样对应于指针类型?
+1。好答案。 – Nawaz
+1简洁的解释。 –
另一种看待这个问题的方法是:'int [M] [N]'到'int **'需要两次转换(这是不允许的),而不是一次转换(这是允许的)。第一次转换需要从'int [M] [N]'转换为*指针*到数组的第一个元素。 [first]元素的类型是'int [N]',因此'int [M] [N]'首先转换成'int(*)[N]',然后需要转换成'int **' * inner *数组的第一个元素'int [N]'转换为'int *'。 – Nawaz