c++中数组索引的类型
Type of array index in C++
c++编程语言中数组索引的类型是什么?例如在这样的语句中:
int tab[5];
转换为什么类型5 ?或者它只是普通的整型?
在这段代码中,5
只是一个普通的整数字面值,所以这里只是一个普通的int
。
§8.3.4 Arrays在n3290 (~ c++ 11)中指定数组声明符:
在声明T D中,其中D的形式为
D1 [ constant-expressionopt ] attribute-specifier-seqopt
且声明T D1中标识符的类型为"derived-declarator-type-list T",则D中标识符的类型为数组类型;如果D的标识符的类型包含自动类型说明符,则程序是病态的。T称为数组元素类型;此类型不能是引用类型、(可能限定了cv的)void类型、函数类型或抽象类类型。如果存在常量表达式(5.19),必须是整型常量表达式,且其值必须大于0 。
§5.2.1 下标描述了表达式中括号中可以包含的内容:
后缀表达式后跟方括号中的表达式是后缀表达式。其中一个表达式的类型应为"指向T的指针",另一个表达式的类型应为无作用域枚举或整型。结果是类型为"t"的左值。类型"T"应该是完全定义的对象类型。表达式E1[E2]等于(根据定义)*((E1)+(E2))
这个问题有点令人困惑。标题提到数组索引类型,但在问题中,您似乎问了其他问题。你在问数组的大小吗?或者索引到数组?声明的数组的大小必须大于0 ;它可以是任意的整型: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]
int tab[5];
是一个数组声明
数组声明接受值大于零的整型常量表达式 (c++11:§8.3.4)。
§5.19.4 (n3242):
如果常量表达式是of,则它是一个积分常量表达式整型或枚举类型。[注:这样的表达可以用作。数组边界(8.3.4,5.3.4),作为大小写表达式(6.4.2),作为位域长度(9.6),…
5
是一个整数字面值(第2.14.2节)。类型为int
。
§2.14.2 (n3242)
2整数字面值的类型是第一个对应的
3整数字面值不能由其列表中的任何类型表示扩展整型(3.9.1)可以表示它的值,它可能有扩展的整数类型. ...
表6中不带后缀的十进制常量类型有:int
、long int
、long long int
。
这是int
,如果你想要不同的类型使用后缀,例如:
5 // int
5u // unsigned int
5l // long
5ul // unsigned long
- 在 std::variant 中按类型获取索引
- 类与枚举类作为索引类型
- 为什么C++数组索引值是有符号的,而不是围绕size_t类型构建的(或者我错了)
- 对于检查 >=0 终止条件时的循环索引类型
- 在索引和值类型上参数化的惯用向量类型
- 用于迭代不同类型的向量的索引类型
- 如何处理使用不同类型索引的不同库(例如 stl 和 eigen3)的混合(size_t、int、..)
- C++:从类型索引中获取超类类型索引
- 在运行时C++11 个索引模板参数包,以便访问第 N 种类型
- 通过索引将字节插入mutli字节类型
- 使用类型作为索引
- 如何确定未知类型数组的索引是否为空
- 使用查找表选择具有运行时索引的可变参数类型
- 将RGB颜色图像转换为OpenCV C 中的索引颜色图像类型
- 按索引将类类型元素从一个向量复制到另一个 c++
- <T> 在使用运算符+ 连接两个向量之前从类型向量中删除索引
- 获取类型列表中的类型的索引
- 获取 boost::variant 的类型索引与 boost::mpl
- 构造一个包含变量类型索引中第n个类型值的boost变量
- 类型索引元组