The C++ 标准草案 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3485.pdf有以下脚注296
在部分27.5.2
Types其中说:
Streamsize 用于 ISO C 使用 size_t 的大多数地方。最多
Streamsize 的用途可以使用 size_t,除了
strstreambuf 构造函数,需要负值。它应该
可能是与 size_t 对应的有符号类型(这就是
Posix.2 调用 ssize_t)。
我们可以在部分看到D.7.1.1
strstreambuf 构造函数我们有以下条目(强调我的前进):
strstreambuf(char* gnext_arg, streamsize n, char *pbeg_arg = 0);
strstreambuf(signed char* gnext_arg, streamsize n,
signed char *pbeg_arg = 0);
strstreambuf(unsigned char* gnext_arg, streamsize n,
unsigned char *pbeg_arg = 0);
并说:
gnext_arg 应指向数组对象的第一个元素,其
元素数量 N 确定如下:
从下面的讨论中我们可以看出n
这是类型streamsize
确实需要能够取负值:
— 如果 n > 0,则 N 为 n。
— 如果 n == 0,则 N 为 std::strlen(gnext_arg)。
— If n < 0, N is INT_MAX.336
对于这一要求,这似乎是一个糟糕的论据已关闭问题 255 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2942.html#255有类似的评论霍华德·希南特其中说:
这有点小问题,但我想知道流是否不会
比 Streamsize 更好的选择。 pbump 和 gbump 的参数必须
被签署。 [...] 这对于 pbump 的论点来说似乎有点弱
和gbump。我们是否应该真正摆脱 strstream,这个脚注
可能会随之而来,以及使 Streamsize 签名的原因。