Чтобы лучше понять буферизованные потоки в C++, я хотел бы написать простую программу, в которой буфер std::cout
НЕ размывается перед завершением. Поскольку я прочитал, что std::cout
сбрасывается при нормальном завершении, я попытался сбросить ошибку времени выполнения. Я также избегал использования std::endl
, так как я понимаю, что заставляет флеш. Первая попытка:Как создать простую программу на C++, в которой std :: cout не сбрасывается
//file noflush.cpp
#include <iostream>
int main() {
std::cout << "Don't write me to the console!";
throw 0;
}
Compile с г ++, вызов из терминала:
$ ./noflush
libc++abi.dylib: terminating with uncaught exception of type int
Don't write me to the console!Abort trap: 6
Даже когда я заставляю ошибки во время выполнения, кажется, буфер все еще получает покраснел от завершения. Возможно ли «запрячь» некоторые данные в буфере, оставив его неписанным для устройства?
Просто сказать, что даже при прерывании с 'станд :: прерыванием()' буфер очищается, (с помощью компании Apple LLVM версии 6.0 (лязг-600.0.57) (на основе LLVM 3.5svn) с LLVM libC++), хотя accor ding to [cppreference] (http: //en.cppreference.com/w/cpp/utility/program/abort) это реализация определена * независимо от того, закрыты ли открытые ресурсы, такие как файлы * (при вызове 'std :: abort()'). – Walter