将-1分配给unsigned int以获取最大值是否安全?

Spe*_*ist 5 c++ unsigned

如果我需要获取最大值,将-1分配给unsigned int或其他无符号c ++数据类型是否安全?

是否存在无法给出无符号数据类型可以包含的最高值的情况?

And*_*rey 12

为了安全起见,请使用std::numeric_limits<unsigned int>::max().将-1转换为unsigned将适用于主流平台,但标准AFAIR无法保证.

UPD:我会纠正自己.(无符号)-1在C中必须是UINT_MAX,请参见此处的答案

  • 将-1转换为`unsigned`类型可以保证按标准工作.问题是意图并不是那么清楚.使用`std :: numeric_limits <unsigned int> :: max()`,它非常清楚.非常冗长,但也非常清楚. (5认同)