我想知道如何在给定平台(C ++中)为字符串的长度设置上限。
我仔细研究了很多库,它们大多数是任意定义的。 GNU C ++ STL(带有实验性C ++ 0x功能的那个)有相当明确的定义:
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)
- 从理论上讲,type size_t可以容纳的最大值是可分配的1字节单元总数(即char类型)
- 前一个值减去跟踪分配内存所需的开销(_Rep_base),因此是字符串中单元的最大数量。将该值除以sizeof(_CharT),因为_CharT可能需要超过一个字节的空间
- 从前一个值中减去1以计算终止字符
- 最后,还需要除以4。我完全不知道为什么!
我查看了很多地方来寻找解释,但无法在任何地方找到令人满意的解释(这就是为什么我一直在尝试编写代码!如果我错了,请纠正我!!)。
size_t
。基本上这是一个便利操作,以便在分配之前执行无溢出检查,以确保结果仍在范围内,而无需针对每个计算检查溢出。但是我不清楚4是什么意思。 - Steve Jessop