是否隐式指定`ios_base :: app`保证`ios_base :: out`?

时间:2014-07-01 02:38:19

标签: c++ file io standards fstream

A:

std::ofstream("test.txt", std::ios_base::app);

B:

std::ofstream("test.txt", std::ios_base::app|std::ios_base::out);

C ++标准保证A是否与B相同?

1 个答案:

答案 0 :(得分:4)

是的,根据[ofstream.cons]

explicit basic_ofstream(const char* s,
    ios_base::openmode mode = ios_base::out);
  

效果:构造类basic_ofstream的对象,使用basic_ostream(&sb)初始化基类并使用basic_filebuf<charT,traits>())初始化sb,然后调用 rdbuf()->open(s, mode|ios_base::out) 。如果该函数返回空指针calls setstate(failbit)

请注意,它不是app具有此保证,而是对底层streambuf本身的调用;您传递给构造函数/ open的所有标记始终与out一起(同样in用于ifstream)。