C++编程语言中的数组索引的类型是什么?例如在这样的声明中:
int tab[5];
Run Code Online (Sandbox Code Playgroud)
什么类型5被转换?或者它可能只是简单的int?
Mat*_*Mat 13
在该代码中,5
只是一个普通的整数文字,所以它只是一个简单的int
.
§8.3.4 阵列在n3290(〜C++ 11),用于指定组声明:
在TD的声明中,D表格
Run Code Online (Sandbox Code Playgroud)D1 [ constant-expressionopt ] attribute-specifier-seqopt
并且声明T D1中的标识符的类型是"derived-declarator-type-list T",则D的标识符的类型是数组类型; 如果D的标识符类型包含auto类型说明符,则程序格式错误.T称为数组元素类型; 此类型不应是引用类型,(可能是cv限定的)类型void,函数类型或抽象类类型.如果存在常量表达式(5.19),则它应为整数常量表达式,其值应大于零.
§5.2.1下标描述了表达式括号中的内容:
后缀表达式后跟方括号中的表达式是后缀表达式.其中一个表达式应具有"指向T的指针"类型,另一个表达式应具有未映射的枚举或整数类型.结果是类型"T"的左值.类型"T"应该是完全定义的对象类型.表达式E1 [E2]与*((E1)+(E2))相同(根据定义)
这个问题有些令人困惑.标题提到数组索引的类型,但在问题中,你似乎问了别的东西.你在询问阵列的大小吗?或索引到数组?声明的数组的大小必须大于零 ; 它可以在任何整数类型:int
,char
,signed char
, unsigned int
,等.在你的问题中,文字的类型5
是int
.
但是,如果您询问数组的索引类型,那么它必须是整数类型之一.数组的索引类型int
也可以是负数,因为它甚至可以是负数.
int a[10][10];
int x = a[3][-1]; //same as a[2][9]
int y = a[3][-2]; //same as a[2][8]
int z = a[3][-3]; //same as a[2][7]
Run Code Online (Sandbox Code Playgroud)
int tab[5];
是一个数组声明。
数组声明接受值大于零的整型常量表达式(c++11: \xc2\xa78.3.4)。
\n\n\n\n\n如果常量表达式是整型或枚举类型,则该常量表达式是整型常量表达式。[ 注意:此类表达式可用作数组边界 (8.3.4、5.3.4)、case 表达式 (6.4.2)、位字段长度 (9.6)、...
\n
5
是整数文字 (\xc2\xa72.14.2)。它的类型是int
.
\n\n\n\n\n2 整数文字的类型是表 6 中可以表示其值的相应列表中的第一个。
\n
\n\n\n3 如果整数文字不能用其列表中的任何类型表示,而扩展整数类型 (3.9.1) 可以表示其值,则它可能具有该扩展整数类型。...
\n
表 6 中不带后缀的十进制常量类型为:int
、long int
、long long int
。