Die beiden Aufrufe haben unterschiedliche Bedeutungen, die nichts mit der Leistung zu tun haben. Die Tatsache, dass es die Ausführungszeit beschleunigt, ist (oder könnte ) nur ein Nebeneffekt. Sie sollten verstehen, was jeder von ihnen tut, und sie nicht blind in jedes Programm aufnehmen, da sie wie eine Optimierung aussehen.
ios_base::sync_with_stdio(false);
Dies deaktiviert die Synchronisation zwischen den C- und C ++ - Standardströmen. Standardmäßig sind alle Standard-Streams synchronisiert, sodass Sie in der Praxis E / A im C- und C ++ - Stil mischen und vernünftige und erwartete Ergebnisse erzielen können. Wenn Sie die Synchronisation deaktivieren, dürfen C ++ - Streams ihre eigenen unabhängigen Puffer haben, was das Mischen von E / A im C- und C ++ - Stil zu einem Abenteuer macht.
Beachten Sie auch, dass synchronisierte C ++ - Streams threadsicher sind (die Ausgabe von verschiedenen Threads kann sich verschachteln, Sie erhalten jedoch keine Datenrennen).
cin.tie(NULL);
Dies löst sich cin
von cout
. Gebundene Streams stellen sicher, dass ein Stream vor jeder E / A-Operation des anderen Streams automatisch gelöscht wird.
Standardmäßig cin
ist gebunden, cout
um eine sinnvolle Benutzerinteraktion zu gewährleisten. Beispielsweise:
std::cout << "Enter name:";
std::cin >> name;
Wenn cin
und cout
gebunden sind, können Sie erwarten, dass die Ausgabe gelöscht wird (dh auf der Konsole sichtbar ist), bevor das Programm Eingaben vom Benutzer auffordert. Wenn Sie die Streams lösen, blockiert das Programm möglicherweise das Warten auf die Eingabe des Namens durch den Benutzer, aber die Meldung "Name eingeben" ist noch nicht sichtbar (da die cout
Ausgabe standardmäßig gepuffert ist, wird sie nur bei Bedarf oder wenn die Ausgabe auf der Konsole gelöscht / angezeigt Puffer ist voll).
Also , wenn Sie untie cin
aus cout
, müssen Sie sicherstellen, spülen cout
manuell jedes Mal , wenn Sie angezeigt werden, bevor sie auf erwartete Eingabe etwas wollen cin
.
Wissen Sie abschließend, was jeder von ihnen tut, verstehen Sie die Konsequenzen und entscheiden Sie dann, ob Sie den möglichen Nebeneffekt einer Geschwindigkeitsverbesserung wirklich wollen oder brauchen .