根据我对boostlibstdc++的了解,通常在事先不知道无符号/有符号索引的上限/下限时,库通常会使用std::size_tstd::ssize_t。我的问题是:为什么不使用uintmax_t中的<cstdint>而不是std::size_tintmax_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

10-06 05:22