浮点值可以用作数组的索引吗?如果用作索引的表达式导致浮点值会发生什么?
答案 0 :(得分:10)
浮点值将被转换为int(它可以根据编译器的警告级别给出警告或错误)
s1 = q[12.2]; // same as q[12]
s2 = q[12.999999]; // same as q[12]
s3 = q[12.1/6.2]; // same as q[1]
答案 1 :(得分:9)
是。但这毫无意义。浮点值将被截断为整数。
(但是,您可以使用std::map<float, T>
,但大部分时间都会因为不准确而错过预期值。)
答案 2 :(得分:2)
C ++数组是一系列连续的内存位置。 a[x]
表示“a
指向的第x个内存位置”。
访问序列中的第12个对象是什么意思?
答案 3 :(得分:1)
它将被转换为int。
答案 4 :(得分:0)
这是一个错误。在[expr.sub]
:
post fi x表达式后跟方括号中的表达式是post fi x表达式。其中一个表达式应具有“指向T的指针”,另一个表达式应具有未映射的枚举或整数类型。
我不知道标准中的一个条款指定转换应该在这里发生(诚然,如果存在这样的子句,我不会感到惊讶),尽管使用ideone.com进行测试确实产生了编译错误。
但是,如果你要订阅一个类而不是一个指针 - 例如std::vector
或std::array
- 然后operator[]
的重载将具有函数调用的通常语义,并且浮点参数将转换为相应的size_type
。