Как сказал Чарльз Бейли, это зависит от реализации; то, что следует в основном для реализации linux с gnu toolchain, но я вряд ли представляю, что он отличается от других os.
В libstdC++ 4.4.2:
fstream содержат основную stdio_filebuf который является basic_filebuf. Этот basic_filebuf содержит собственный буфер, наследуя basic_streambuf, и фактически содержит файл __basic_file, который содержит базовую простую абстракцию C stdio (FILE * или std :: __ c_file *), в которой он очищает буфер.
cout, который представляет собой ostream, инициализируется инициализацией файла stdio_sync_filebuf с помощью stdout абстракции файла C. stdio_sync_filebuf вызывать простые функции C stdio.
Учитывая только C++, окажись, что fstream может быть более эффективным благодаря двум слоям буфера.
Принимая во внимание только C, если процесс разветвляется с файловым дескриптором stdout, перенаправленным в файл, не должно быть разницы между записью в новый открытый файл (что делает fstream в конце) или stdout с точки fd в любом случае (какой cout делает в конце).
Если бы я был вами, я использовал бы fstream, поскольку это ваши намерения.
Хммм, еще один ответ, другой анонимный нижний план. Если бы я не знал лучше, я бы сказал, что кто-то с недовольством следил за мной ... – Troubadour