使用数组名称时出现异常 我正在读一本C++ 11的书,作者说
与任何数组一样,当我们使用多维数组的名称时,它是 自动转换为指向数组中第一个元素的指针 然后作者提到,当我们将数组的名称传递给使用数组名称时出现异常 我正在读一本C++ 11的书,作者说,c++,arrays,C++,Arrays,与任何数组一样,当我们使用多维数组的名称时,它是 自动转换为指向数组中第一个元素的指针 然后作者提到,当我们将数组的名称传递给decltype时,它不会转换为指向数组中第一个元素的指针 如果我们有这样一个数组:intarr[5][3],然后键入:decltype(arr)test。test的类型将被正确推导,test将是一个由5个数组组成的3个整数的数组 我的问题是,除了前面提到的decltypeone之外,还有其他例外吗 谢谢。例如,当数组通过引用使用时,或者当数组用于某些运算符(如sizeo
decltype
时,它不会转换为指向数组中第一个元素的指针
如果我们有这样一个数组:intarr[5][3]
,然后键入:decltype(arr)test
。test
的类型将被正确推导,test
将是一个由5个数组组成的3个整数的数组
我的问题是,除了前面提到的decltype
one之外,还有其他例外吗
谢谢。例如,当数组通过引用使用时,或者当数组用于某些运算符(如
sizeof
运算符或&
运算符)时,数组不会转换为指向其第一个元素的指针
例如,考虑这个程序
#include <iostream>
int main()
{
int a[] = { 1, 2 };
decltype( auto ) b = ( a );
}
#包括
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;
}
#包括
int main()
{
int a[]={1,2};
decltype(自动)b=a;
}
< /代码> C和C++是不一样的…选择one@SouravGhosh修正。decltype
不是规则的例外,因为它不是函数调用。例如,当Michael Naifield在sisiof运算符中使用数组时,@ ErICALAP SuqA.对于C89来说可能是正确的,但是C和C++都有新的标准,而有效的C11程序可能不是一个有效的C++ 14程序。我理解发生了什么。阿纳尔。你能解释一下为什么会发生这种情况吗?@BatCoder如果在这样一个声明的括号中使用了一个表达式,那么推导出的类型就是一个引用类型。例如,对于显示的第一个程序,推断的类型将是int(&)[2]。在基于范围的For循环中使用数组的名称如何?它是否正在转换为指向其第一个元素的指针?@MichaelNaifield语句的范围基中使用的数组未转换为指针。但是基于范围的for语句使用表达式a和+维度(a为0,其中a为数组名)。