std :: ifstream :: read或std :: ofstream :: write使用零参数?

Vin*_*ent 6 c++ file standards-compliance stream zero

是否完全可以(根据标准明确定义的行为)来调用:

mystream.read(buffer, 0);
Run Code Online (Sandbox Code Playgroud)

要么

mystream.write(buffer, 0);
Run Code Online (Sandbox Code Playgroud)

(当然,什么都不会被读或写).我想知道在调用这两个函数之一之前是否必须测试提供的大小是否为null.

Cub*_*bbi 8

是的,行为是明确定义的:两个函数都将通过无格式输入/输出函数的动作(构建哨兵,如果设置了eofbit则设置failbit,必要时刷新绑定流),然后他们将得到这个子句:

§27.7.2.3[istream.unformatted]/30

提取并存储字符,直到出现以下任何一种情况:

- 存储n个字符;

§27.7.3.7[ostream.unformatted]/5

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

- 插入n个字符;

在存储或提取任何内容之前,"存储/插入零字符"为真.

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