我想知道如何为给定平台修复字符串长度的上限(在 C++ 中)。
我仔细检查了很多库,其中大多数都是任意定义的。GNU C++ STL(具有实验性 C++0x 特性的 STL)有一个明确的定义:
size_t npos = size_t(-1); /*!< The maximum value that can be stored in a variable of type size_t */
size_t _S_max_len = ((npos - sizeof(_Rep_base))/sizeof(_CharT) - 1) / 4; /*!< Where _CharT is a template parameter; _Rep_base is a structure which encapsulates the allocated memory */
以下是我对公式的理解:
- size_t 类型必须保存分配给字符串的单元数(其中每个单元的类型为 _CharT)
- 理论上,size_t 类型的变量可以取的最大值是可以分配的 1 字节(即 char 类型)单元的总数
- 因此,先前的值减去跟踪分配的内存 (_Rep_base) 所需的开销是字符串中的最大单元数。将此值除以 sizeof(_CharT) 因为 _CharT 可能需要超过一个字节
- 从前一个值中减去 1 以说明终止字符
- 最后,除以 4。我完全不知道为什么!
我看了很多地方的解释,但在任何地方都找不到令人满意的地方(这就是为什么我一直在努力弥补它的原因!如果我错了,请纠正我!!)。