ассоциация объекта fstream по умолчанию - PullRequest
1 голос
/ 15 марта 2020

В этой программе:

#include<iostream>
#include<fstream>

int main()
{
    std::ofstream ob;

    ob<<"hello"<<std::endl;
    return 0;
}

Где это hello записано / выведено, поскольку ob не связано ни с одним файлом? Это внутренний файловый буфер?

Ответы [ 2 ]

2 голосов
/ 15 марта 2020

Выходные данные игнорируются.

Когда что-либо записывается в поток, он вызывает метод overflow (или внутренний эквивалент) его соответствующего потокового буфера для каждого записанного символа. Согласно cppreference.com для std::basic_filebuf:

Если связанный файл не открыт (is_open() == false), возвращает Traits::eof(), прежде чем что-либо делать.

Как только overflow возвращает eof, поток failbit устанавливается и все другие выходные данные игнорируются.

1 голос
/ 15 марта 2020

Шаблон класса std :: ofstream имеет несколько конструкторов. В этом примере используется конструктор по умолчанию std :: ofstream для создания объекта, не связанного с файлом.

Выдержка из ссылки:

1) Конструктор по умолчанию: создает поток, который не связан с файлом: конструктор по умолчанию std :: basic_filebuf и создает базу с указателем на этот построенный по умолчанию элемент std::basic_filebuf .

@ Ответ Спенсера подробно описывает, что происходит потом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...