clog — Учитывая приведенную ниже программу на 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 в этом коде. Почему мы не можем просто создать файл и записать все, что нам нужно? Любое объяснение будет оценено.

0

Решение

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

2

Другие решения

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

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

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

2

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

0