完全可以(根据标准明确定义的行为)来调用:
mystream.read(buffer, 0);
或
mystream.write(buffer, 0);
(当然没有任何东西可以读或写)。 我想知道在调用这两个函数之一之前是否必须测试提供的大小是否为null。
答案 0 :(得分:8)
是的,行为定义明确:两个函数都将通过无格式输入/输出函数的动作(构建哨兵,如果设置了eofbit则设置failbit,必要时刷新绑定的流),然后它们将获得本条款:
§27.7.2.3[istream.unformatted] / 30
提取并存储字符,直到出现以下任何一种情况:
- 存储n个字符;
§27.7.3.7[ostream.unformatted] / 5
在存储或提取任何内容之前,插入字符,直到出现以下任何一种情况
- 插入n个字符;
“存储/插入零个字符”为真。
查看实际的实施情况,我看到for (; gcount < n; ++gcount)
in libc++或sgetn(buffer, n);
in stdlibc++有equivalent loop
答案 1 :(得分:0)
27.7.2.3 Unformatted input functions/1
的另一个提取给我们一个线索,即零大小的输入缓冲区是有效的情况:
未格式化的输入函数将非零大小的字符数组作为参数,还应在数组的第一个位置存储空字符(使用charT())。