Le due chiamate hanno significati diversi che non hanno nulla a che fare con le prestazioni; il fatto che acceleri i tempi di esecuzione è (o potrebbe essere ) solo un effetto collaterale. Dovresti capire cosa fa ognuno di loro e non includerli ciecamente in ogni programma perché sembrano un'ottimizzazione.
ios_base::sync_with_stdio(false);
Ciò disabilita la sincronizzazione tra i flussi standard C e C ++. Per impostazione predefinita, tutti i flussi standard sono sincronizzati, il che in pratica consente di mescolare I / O di tipo C e C ++ e ottenere risultati sensibili e attesi. Se disabiliti la sincronizzazione, i flussi C ++ possono avere i loro buffer indipendenti, il che rende un'avventura il mix di I / O in stile C e C ++.
Inoltre, tieni presente che i flussi C ++ sincronizzati sono thread-safe (l'output di thread diversi può intercalare, ma non ottieni corse di dati).
cin.tie(NULL);
Questo scioglie cinda cout. I flussi collegati assicurano che uno stream venga scaricato automaticamente prima di ogni operazione I / O sull'altro stream.
Di default cinè legato per coutgarantire una ragionevole interazione dell'utente. Per esempio:
std::cout << "Enter name:";
std::cin >> name;
Se cine coutsono collegati, è possibile aspettarsi che l'output venga scaricato (ovvero visibile sulla console) prima che il programma richieda l'input dell'utente. Se si slegano i flussi, il programma potrebbe bloccarsi in attesa che l'utente inserisca il proprio nome ma il messaggio "Inserisci nome" non è ancora visibile (poiché coutè bufferizzato per impostazione predefinita, l'output viene scaricato / visualizzato sulla console solo su richiesta o quando il il buffer è pieno).
Quindi, se si slegare cinda cout, è necessario assicurarsi di lavare coutmanualmente ogni volta che si desidera visualizzare qualcosa prima di aspettarsi ingresso cin.
In conclusione, sappi cosa fanno ognuno di loro, comprendi le conseguenze e poi decidi se vuoi davvero o se hai bisogno del possibile effetto collaterale del miglioramento della velocità.