根据我对boost
和libstdc++
的了解,通常在事先不知道无符号/有符号索引的上限/下限时,库通常会使用std::size_t
和std::ssize_t
。我的问题是:为什么不使用uintmax_t
中的<cstdint>
而不是std::size_t
和intmax_t
来代替std::ssize_t
?
最佳答案
C++ 11标准(第18.2节)说:
从中我们看到:size_t
专门用于对象的字节大小,其配套ptrdiff_t
专门用于具有数组索引的数学。另一方面,uintmax_t
是最大的无符号整数类型。
取决于平台,uintmax_t
可以大于size_t
。
我们也知道:sizeof
返回一个size_t
,并且STL容器size_type
通常与size_t
相同,因此在处理size_t
或STL容器的代码中使用sizeof
是有意义的。
现在混入<cstdint>
对C++来说是新奇的事实,我认为很清楚为什么像Boost这样的已建立库都在使用size_t
。