使用数组名称时的异常
Exceptions when using a name of an array
我正在读一本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;
}
相关文章:
- 对象初始化后在C++中显示 char 数组时的异常行为
- 如果分配数组引发异常,是否应该释放该数组
- 数组 C++ 上的异常处理程序
- 封送指向结构异常"cannot Read or Write protected memory"的指针数组的指针数组
- 在数组索引上引发异常
- 在 C++ 中使用递归填充 D2 数组,有时工作正常,其他时会引发异常
- 动态指针引用数组由三元运算符返回值,但有异常
- 异常 尝试初始化动态数组时未处理
- 我的数组大小调整代码在新数据上引发异常[size_t]
- ESP8266异常在尝试从字节数组读取float时
- 当用户在字符数组中输入整数值时捕获异常
- 分配数组时有异常,将其分配为 2D 数组时没有异常
- 为什么在这个动态数组中抛出异常
- 访问动态 2D 字符数组时引发访问冲突异常
- C :抛出的异常:通过数组阅读访问违规
- 类数组大小为的未处理异常
- 如何在类数组中的运算符 [] 中捕获异常
- ATL/COM:为什么 CComSafeArray::GetCount() 会为空数组抛出异常
- 将索引超出数组边界在 C++ 中的内核之前抛出异常或错误
- C++:如何通过异常处理从越界数组返回值