未在 C++ 中打开时是否允许写入 ofstream

Is it allowed to write to a ofstream when it is not opened in c++

我有这样的代码:

# in class definition
std::ofstream m_myFile;

## some where in code
m_myFile.open(filename);

然后在几个地方,我写到文件如下:

m_myFile << "some data to file"<<std::endl;

这运行良好,现在我需要向系统添加一个标志,当未设置时,不应创建和写入此文件。我已经检查过,如果我这样做,我可以 运行 申请:

if(createFile)
{
      m_myFile.open(filename);
}

并保留写入文件的原样,我在 windows 上没有收到任何 运行时间错误。我的问题是,如果我不打开文件并写入其流,标准行为是什么?

我应该得到 运行 时间错误还是 ofstream 只是忘记数据而不是 运行 时间错误?

我正在使用 Visual Studio 2013.

如果您不打开该文件,您将拥有一个流,该流具有正在写入的默认构造的文件缓冲区,并且在丢弃 ofstream 时将被丢弃。

标准行为是第一次写入失败。这会设置 std::ofstream::badbit 并且进一步的写入将被静默忽略。

可以通过设置 m_myFile.exceptions(std::ofstream::badbit) 将这种静默失败更改为异常,但默认情况下它是关闭的。

您可以通过创建 "dev null" streambuf 然后将您的流切换到该缓冲区(通过 .rdbuf)来使任何流(甚至 std::cout)丢弃其输出