我有一些整数变量和一个向量。我需要使用整数变量作为向量中的索引。
简单地说some_vector[some_integer]
可以吗?
还是我需要以某种方式将整数转换为大小类型?
答案 0 :(得分:4)
是,将被转换为size_t
,而没有任何警告或错误。但是要当心负值。如果您的int i
为负,则转换将产生std::numeric_limits<size_t>::max() + 1 - abs(i)
,通常为非常大的数字,可能会导致不良后果。因此,如果索引可以是负数,请在索引编制之前进行检查。
UPD : 严格来说,根据您的编译器标志,可能会出现警告。在使用g ++的情况下,此处有两个相关内容:
-Wconversion
警告可能会更改该值的转化。在整数转换中,当目标类型小于源类型(例如int32_t y = 1000; int16_t x = y;
)时,可能会发生这种情况。int16_t y = -1; uint32_t x = y;
)或目标与源大小相同(例如unsigned int y = UINT_MAX; int x = y;
)的有符号无符号转换也可能会更改该值,并且使用C {{ 1}}确实发出警告,但是在C ++中,您需要添加-Wconversion
使其显示。我怀疑他们之所以在C ++中取得成功,恰恰是因为人们通常使用-Wsign-conversion
为std::vector
编制索引,并且如果警告出现在警告中,则必须花费过多的int
来消除警告。这种情况。
Microsoft CL通过警告C4244来覆盖第一种情况,该警告由/ W3或/ W4打开,而对于第二种情况,我找不到警告开关。如果有人知道,请发表评论。
AFAIK,C ++标准没有明确要求static_cast
的大小等于或大于size_t
。但是我不知道在哪个平台上并非如此。因此,从int
到int
的转换属于第二类。
总结:如我之前所说,除非您使用带有size_t
开关的g ++,否则很可能不会收到从C ++到int
到size_t
转换的警告。 / p>