Comme l'a dit Charles Bailey, il est dépendant de la mise en œuvre; ce qui suit est principalement pour l'implémentation de linux avec gnu toolchain, mais j'imagine difficilement qu'il soit très différent dans d'autres os.
En libstdC++ 4.4.2:
Un fstream contiennent un stdio_filebuf sous-jacente qui est un basic_filebuf. Ce basic_filebuf contient son propre tampon en héritant basic_streambuf, et contient en fait un fichier __basic_file, lui-même contenant une abstraction C stdio C sous-jacente (FILE * ou std :: __ c_file *), dans laquelle il vide la mémoire tampon. Cout, qui est un ostream est initialisé avec un stdio_sync_filebuf lui-même initialisé avec le stdout d'abstraction du fichier C. stdio_sync_filebuf appelle les fonctions simples de C stdio.
Considérant que C++, il semble qu'un fstream peut être plus efficaces grâce à deux couches de tampon. Considérant seulement C, si le processus est forké avec le descripteur de fichier stdout redirigé dans un fichier, il ne devrait y avoir aucune différence entre écrire dans un nouveau fichier ouvert (ce que fait fstream à la fin) ou stdout depuis le point fd à un fichier de toute façon (ce que cout fait à la fin).
Si j'étais vous, j'utiliserais un fstream puisque c'est votre intention.
Hmmm, une autre réponse, un autre downvote anonyme. Si je ne savais pas mieux, je dirais que quelqu'un avec rancune me suivait ... – Troubadour