std::basic_ofstream<CharT,Traits>::basic_ofstream
来自cppreference.com
< cpp | io | basic ofstream
basic_ofstream(); |
(1) | |
explicit basic_ofstream( const char* filename, std::ios_base::openmode mode = ios_base::out ); |
(2) | |
explicit basic_ofstream( const std::filesystem::path::value_type* filename, std::ios_base::openmode mode = ios_base::out ); |
(3) | (C++17 起) |
explicit basic_ofstream( const std::string& filename, std::ios_base::openmode mode = ios_base::out ); |
(4) | (C++11 起) |
template< class T > explicit basic_ofstream( const T& filename, |
(5) | (C++17 起) |
basic_ofstream( basic_ofstream&& other ); |
(6) | (C++11 起) |
basic_ofstream( const basic_ofstream& rhs) = delete; |
(7) | (C++11 起) |
构造新的文件流。
2-3) 首先,进行同默认构造函数的步骤,然后通过调用 rdbuf()->open(filename, mode | std::ios_base::out)(该调用效果上的细节见 std::basic_filebuf::open )关联流与文件。若 open() 调用返回空指针,则设置 setstate(failbit) 。仅若 std::filesystem::path::value_type 非 char 才提供重载 (3) 。 (C++17 起)
4-5) 同 basic_ofstream(filename.c_str(), mode) 。 (5) 仅若
T
为 std::filesystem::path 才参与重载决议。 (C++17 起)注意,尽管默认模式是 out
,效果等同于描述于 std::filebuf::open 的 out|trunc
的效果。6) 移动构造函数:首先,从
other
移动构造基类(这不影响 rdbuf()
指针),然后移动构造 std::basic_filebuf 成员,再调用 this->set_rdbuf() 安装新的 basic_filebuf
为基类中的 rdbuf() 指针。7) 复制构造函数被删除:此类不可复制。
参数
filename | - | 要打开的文件名 | ||||||||||||||
mode | - | 指定打开模式。可使用下列常量或它们之间的逐位或:
| ||||||||||||||
other | - | 用作源的另一文件流 |
示例
运行此代码
#include <fstream> #include <utility> #include <string> int main() { std::ofstream f0; std::ofstream f1("test.bin", std::ios::binary); std::string name = "example.txt"; std::ofstream f2(name); std::ofstream f3(std::move(f1)); }
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
DR | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 3430 | C++17 | std::filesystem::path 重载导致了不想要的转换 | 使之为模板以避免 |
参阅
打开文件,并将它与流关联 (公开成员函数) | |
打开文件并配置它为关联字符序列 ( std::basic_filebuf<CharT,Traits> 的公开成员函数) | |
替换 rdbuf 而不清除其错误状态 (受保护成员函数) | |
构造对象 ( std::basic_ostream<CharT,Traits> 的公开成员函数) |