Float Value作为C ++中Array的索引

时间:2010-02-22 12:38:07

标签: c++

浮点值可以用作数组的索引吗?如果用作索引的表达式导致浮点值会发生什么?

5 个答案:

答案 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::vectorstd::array - 然后operator[]的重载将具有函数调用的通常语义,并且浮点参数将转换为相应的size_type