std::basic_filebuf<CharT,Traits>::close - cppreference.com
来自cppreference.com
std::basic_filebuf<CharT, Traits>* close(); |
||
如果放置区存在(即文件为写入而打开),那么会首先调用 overflow(Traits::eof()) 向文件写入所有未决输出,包含任何反迁移序列。
如果在 underflow()、overflow()、seekpos() 和 seekoff() 之中最近调用的函数是 overflow(),那么可能会多次调用 std::codecvt::unshift(),以按照浸染的本地环境确定反迁移序列,并将该序列以 overflow(Traits::eof()) 写入文件。
然后,如同以调用 std::fclose() 关闭文件,不考虑任何之前调用成功还是失败。
如果作出的任何函数调用(包含对 std::fclose() 的调用)失败,那么就会返回空指针。如果作出的任何函数调用抛出异常,那么捕捉该异常并在关闭文件后重抛。如果该文件已关闭,那么立即返回空指针。
任何情况下,都更新 is_open() 所访问的私有成员变量。
参数
(无)
返回值
成功时返回 this,失败时返回空指针。
注解
close() 通常是通过 std::basic_filebuf 的析构函数调用的(而它则通常由 std::basic_fstream 的析构函数所调用)。
示例
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| LWG 443 | C++98 | 文件通过 overflow(EOF) 写入
|
改成 overflow(Traits::eof())
|
| LWG 622 | C++98 | 不明确如何处理关闭过程中抛出的异常 | 在关闭文件后重抛 |