使用数组名称时的例外情况

时间:2016-07-11 14:27:45

标签: c++ arrays

我正在阅读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除外)?

感谢。

1 个答案:

答案 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;
}