Te dwa wezwania mają różne znaczenia, które nie mają nic wspólnego z wydajnością; fakt, że przyspiesza czas wykonywania, jest (lub może być ) tylko efektem ubocznym. Powinieneś zrozumieć, co robi każdy z nich i nie włączać ich na ślepo do każdego programu, ponieważ wyglądają jak optymalizacja.
ios_base::sync_with_stdio(false);
Spowoduje to wyłączenie synchronizacji między standardowymi strumieniami C i C ++. Domyślnie wszystkie standardowe strumienie są zsynchronizowane, co w praktyce pozwala na mieszanie I / O w stylu C i C ++ i uzyskanie rozsądnych i oczekiwanych rezultatów. Jeśli wyłączysz synchronizację, strumienie C ++ będą mogły mieć własne niezależne bufory, co sprawia, że mieszanie operacji we / wy w stylu C i C ++ jest przygodą.
Należy również pamiętać, że zsynchronizowane strumienie C ++ są bezpieczne dla wątków (dane wyjściowe z różnych wątków mogą się przeplatać, ale nie pojawiają się wyścigi danych).
cin.tie(NULL);
To rozwiązuje cinz cout. Powiązane strumienie zapewniają, że jeden strumień jest automatycznie opróżniany przed każdą operacją we / wy w drugim strumieniu.
Domyślnie cinjest powiązany, coutaby zapewnić rozsądną interakcję użytkownika. Na przykład:
std::cout << "Enter name:";
std::cin >> name;
Jeśli cini coutsą powiązane, możesz oczekiwać, że dane wyjściowe zostaną opróżnione (tj. Będą widoczne na konsoli), zanim program poprosi użytkownika o dane wejściowe. Jeśli rozwiążesz strumienie, program może zablokować oczekiwanie na wprowadzenie przez użytkownika nazwy, ale komunikat „Wprowadź nazwę” nie jest jeszcze widoczny (ponieważ coutjest domyślnie buforowany, wyjście jest opróżniane / wyświetlane na konsoli tylko na żądanie lub gdy bufor jest pełny).
Więc jeśli untie cinz cout, należy upewnić się, aby opróżnić coutręcznie za każdym razem, gdy chcesz wyświetlić coś przed oczekując na wejście cin.
Podsumowując, wiedz, co robi każdy z nich, zrozum konsekwencje, a następnie zdecyduj, czy naprawdę chcesz lub potrzebujesz możliwego efektu ubocznego w postaci poprawy szybkości.