В этой программе:
#include<iostream> #include<fstream> int main() { std::ofstream ob; ob<<"hello"<<std::endl; return 0; }
Где это hello записано / выведено, поскольку ob не связано ни с одним файлом? Это внутренний файловый буфер?
hello
ob
Выходные данные игнорируются.
Когда что-либо записывается в поток, он вызывает метод overflow (или внутренний эквивалент) его соответствующего потокового буфера для каждого записанного символа. Согласно cppreference.com для std::basic_filebuf:
overflow
std::basic_filebuf
Если связанный файл не открыт (is_open() == false), возвращает Traits::eof(), прежде чем что-либо делать.
is_open() == false
Traits::eof()
Как только overflow возвращает eof, поток failbit устанавливается и все другие выходные данные игнорируются.
eof
failbit
Шаблон класса std :: ofstream имеет несколько конструкторов. В этом примере используется конструктор по умолчанию std :: ofstream для создания объекта, не связанного с файлом.
Выдержка из ссылки:
1) Конструктор по умолчанию: создает поток, который не связан с файлом: конструктор по умолчанию std :: basic_filebuf и создает базу с указателем на этот построенный по умолчанию элемент std::basic_filebuf .
@ Ответ Спенсера подробно описывает, что происходит потом.