获取C++中最大的有符号整数类型

Sky*_*eSM 1 c c++ signed size-t unsigned-integer

假设我必须接受一个大小作为处理数组的接口的参数.对于前者

void doSomethingRelatedToArrays(const size_t length)
Run Code Online (Sandbox Code Playgroud)

在这里,我使用size_t时考虑到以下因素:

  • 长度必须始终为正
  • size_t始终是typedef-ed到系统中最大的无符号整数类型.std :: size_t可以存储任何类型的理论上可能的对象的最大大小.

但是,我不应该在我的接口中使用无符号类型,因为客户端可以传入负数,这是隐式转换为无符号数,我没有办法在我的方法中验证它.请参阅斯科特·迈尔的文章就这个问题在这里.

所以,我应该将有符号整数类型传递给API.但是如何在系统中获得最大的有符号整数类型?是否有任何类似于size_t的typedef被签名?或者我应该只使用size_t?

Ser*_*sta 5

签名的等价物size_t很简单,ssize_t但即使许多编译器都知道,这种类型也没有在C99标准中定义.

对于C99标准,最大有符号整数类型定义为intmax_t.

参考:7.Library/7.18整数类型/ 7.18.1.5最大宽度整数类型