std::ifstream::read 或 std::ofstream::write 带有零参数?

std::ifstream::read or std::ofstream::write with a zero parameter?

本文关键字:std 参数 ofstream ifstream read write      更新时间:2023-10-16

调用:

mystream.read(buffer, 0);

mystream.write(buffer, 0);

(当然,不会读取或写入任何内容)。 我想知道在调用这两个函数之一之前是否必须测试提供的大小是否为空。

是的,行为是明确定义的:这两个函数都将经历未格式化输入/输出函数的动作(构造哨兵,如果设置了 eofbit 则设置 failbit,如有必要,刷新绑定流),然后它们将得到这个子句:

§27.7.2.3[istream.unformatted]/30

提取并存储字符,直到发生以下任一情况:

— 存储 n 个字符;

§27.7.3.7[ostream.unformatted]/5

插入字符,直到出现以下任一情况

— 插入 n 个字符;

"存储/插入零个字符"在存储或提取任何内容之前为 true。

查看实际实现,我看到libc ++中的for (; gcount < n; ++gcount)或stdlibc ++中的sgetn(buffer, n);具有等效循环

27.7.2.3 Unformatted input functions/1中提取的另一个数据为我们提供了零大小输入缓冲区有效案例的线索:

非零大小的字符数组作为参数的无格式输入函数还应在数组的第一个位置存储一个空字符(使用 charT())。