Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用数组名称时出现异常 我正在读一本C++ 11的书,作者说_C++_Arrays - Fatal编程技术网

使用数组名称时出现异常 我正在读一本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为数组名)。