我正在阅读C ++ 11书,作者说
与任何数组一样,当我们使用多维数组的名称时,它就是 自动转换为指向数组中第一个元素的指针。
然后作者提到,当我们将数组的名称传递给public class longCalculations
{
public static void LongMethod1()
{
// Arbitrarily long code goes here
}
}
时,它不会转换为指向数组中第一个元素的指针。
如果我们有这样的数组:decltype
,则输入以下内容:int arr[5][3]
。 decltype(arr) test
的类型将被正确推导出来,test
将是包含3个整数的5个数组的数组。
我的问题是,前面提到的规则是否还有其他例外(test
除外)?
感谢。
答案 0 :(得分:1)
例如,当通过引用使用数组或在某些运算符(如sizeof
运算符或&
运算符中使用数组时,数组不会转换为指向其第一个元素的指针。
考虑一下这个程序
#include <iostream>
int main()
{
int a[] = { 1, 2 };
decltype( auto ) b = ( a );
}
该程序将成功编译,数组a不会转换为指针。
但是如果要删除周围的括号,那么这个程序将无法编译,因为数组a将被转换为指针。
#include <iostream>
int main()
{
int a[] = { 1, 2 };
decltype( auto ) b = a;
}