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

                             = std::ios_base::out );
(2)
explicit basic_ofstream( const std::filesystem::path::value_type* filename,

                         std::ios_base::openmode mode

                             = std::ios_base::out );
(3) (C++17 起)
explicit basic_ofstream( const std::string& filename,

                         std::ios_base::openmode mode

                             = std::ios_base::out );
(4) (C++11 起)
template< class FsPath >

explicit basic_ofstream( const FsPath& filename,
                         std::ios_base::openmode mode

                             = std::ios_base::out );
(5) (C++17 起)
basic_ofstream( basic_ofstream&& other );
(6) (C++11 起)
basic_ofstream( const basic_ofstream& rhs) = delete;
(7) (C++11 起)

构造新的文件流。

1) 默认构造函数:构造不关联到文件的流:默认构造 std::basic_filebuf 并构造拥有指向此默认构造的 std::basic_filebuf 成员的基类。
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) 只有在 FsPathstd::filesystem::path 时才会参与重载决议。 (C++17 起)注意,尽管默认模式是 out,效果等同于描述于 std::filebuf::openout | trunc 的效果。
6) 移动构造函数:首先,从 other 移动构造基类(这不影响 rdbuf() 指针),然后移动构造 std::basic_filebuf 成员,再调用 this->set_rdbuf() 安装新的 basic_filebuf 为基类中的 rdbuf() 指针。
7) 复制构造函数被删除:此类不可复制。

参数

filename - 要打开的文件名
mode - 指定打开模式。可使用下列常量或它们之间的逐位或:
常量 解释
app 每次写入前寻位到流结尾
binary 二进制模式打开
in 为读打开
out 为写打开
trunc 在打开时舍弃流的内容
ate 打开后立即寻位到流结尾
noreplace (C++23) 以独占模式打开
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++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 3430 C++17 std::filesystem::path 重载导致了不想要的转换 使之为模板以避免

参阅

打开文件,并将它与流关联
(公开成员函数)
打开文件并配置它为关联字符序列
(std::basic_filebuf<CharT,Traits> 的公开成员函数)
替换 rdbuf 而不清除其错误状态
(受保护成员函数)
构造对象
(std::basic_ostream<CharT,Traits> 的公开成员函数)