使用数组名称时的异常

Exceptions when using a name of an array

本文关键字:异常 数组      更新时间:2023-10-16

我正在读一本C++ 11的书,作者说

与任何数组一样,当我们使用多维数组的名称时,它是 自动转换为指向数组中第一个元素的指针。

然后作者提到,当我们传递数组的名称时decltype它不会转换为指向数组中第一个元素的指针。

如果我们有这样的数组: int arr[5][3] ,然后键入: decltype(arr) test .test的类型将被正确推断,test将是一个由 5 个数组组成的数组,每个数组 3 个整数。

我的问题是,前面提到的规则还有其他例外(除了decltype例外)吗?

谢谢。

例如,当数组通过引用使用时,或者当数组用于某些运算符(如运算符或运算符& sizeof数组时,数组不会转换为指向其第一个元素的指针。

例如考虑这个程序

#include <iostream>
int main() 
{
    int a[] = { 1, 2 };
    decltype( auto ) b = ( a );
}

该程序将成功编译,数组 a 不会转换为指针。

但是,如果要删除 a 周围的括号,则此程序将不会编译,因为数组 a 将被转换为指针。

#include <iostream>
int main() 
{
    int a[] = { 1, 2 };
    decltype( auto ) b = a;
}