Учитывая приведенную ниже программу на C++, что следует вставить вместо //*****, чтобы обеспечить 100% чистое отключение?

Это экзаменационный вопрос:

Учитывая приведенную ниже программу на C++, то, что должно быть вставлено вместо //***** обеспечить 100% чистое отключение?

#include <iostream>
#include <fstream>

int main(int argc, char* argv[])
{
    using namespace std;

    fstream log("log.txt", ios::out);
    streambuf* clog_buf = clog.rdbuf(log.rdbuf());

    clog << "Test the logger" << endl;

    //*****
}
  • А. Ничего не пропало.
  • B. выход ();
  • C. clog.rdbuf(clog_buf);
  • D. clog.rdbuf(0);
  • E. log.rdbuf(0);

Я довольно запутался в использовании log а также clog в этом коде. Почему мы не можем просто создать файл и записать все, что нам нужно? Любое объяснение будет оценено.

3 ответа

clog_buf указывает на буфер потока, на который указывает засорение, прежде чем вы сбросите его rdbuf, Чистое отключение может быть достигнуто путем сброса буфера потока засорения к тому, что было раньше, используя C (clog.rdbuf( clog_buf );).

Код меняет стандарт clog Поток (который изначально работает на STDERR) для файлового потока. Это означает, что любой код в любой точке программы, которая передает clog вместо этого теперь будет выполняться потоковая передача в файл. Это хороший локализованный способ перенаправления вывода журнала, который не требует поиска / замены десяти миллионов высказываний текста. clog в вашем исходном коде.

Ответ С, который обращает clog вернуться к тому, как вы нашли его до неявного return 0 запускается, и программа завершается изящно, включая обычное уничтожение файлового потока.

exit() это постепенное завершение работы, которое не приведет к правильному закрытию вашего файлового потока.

Этот код не является безопасным для исключений. Поэтому, несмотря на исключения, ни один из ответов не обеспечит 100% -ное отключение.

Другие вопросы по тегам