Questo significa semplicemente che qualsiasi cosa facciamo con oggetto come cout viene sincronizzata con stdout (e viceversa?). Cosa significa esattamente? Anche lo stdio è sincronizzato con stdout?Qual è il significato esatto di iostream è sincronizzato con ios_base :: sync_with_stdio
risposta
L'ostream predefinita utilizzata da std :: cout e stdio (come printf) è stdout, ma non è necessariamente così.
L'uscita potrebbe essere sempre reindirizzata all'altra destinazione. Riferimento a questo: http://www.tldp.org/LDP/abs/html/io-redirection.html
Per cppreference:
Sets whether the standard C++ streams are synchronized to
the standard C streams after each input/output operation.
Se la sincronizzazione è disattivata, in alcuni casi i flussi C++ saranno più veloci.
Per impostazione predefinita, tutti gli stream C++ standard sono sincronizzati con i rispettivi flussi C.
Esempio:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
cout.sync_with_stdio(false);
cout << "Hello\n";
printf("World\n");
cout << "...\n";
}
uscita:
Hello
...
World
Cambiare a true
dà risultato di default in ordine. Uscita:
Hello
World
...
@POW Quindi, posso trarre conclusioni, se non in sincronia, cout/printf non può garantire l'ordine o addirittura non può garantire che le cose vengano stampate? –
@pranitkothari non necessariamente, un 'endl' cambierà scenario anche con sincronizzazione disattivata – P0W
@POW sicuro, ma che dire senza endl che sto chiedendo. Conosco il buffer di flush endl. Ma cosa senza. –
Ciò significa che è possibile eseguire l'output su un dispositivo simile alla stampante mediante cout. Se possibile, puoi suggerire il modo. –
@pranitkothari Sì. Il problema è ottenere il descrittore del file del dispositivo e reindirizzare cout (con un descrittore di file 1). Puoi farlo in linea di comando. Il link sopra potrebbe darti qualche idea. – lulyon