Эти два вызова имеют разные значения, которые не имеют ничего общего с производительностью; тот факт, что он ускоряет время выполнения, является (или может быть ) лишь побочным эффектом. Вы должны понимать, что делает каждый из них, и не включать их вслепую в каждую программу, потому что они выглядят как оптимизация.
ios_base::sync_with_stdio(false);
Это отключает синхронизацию между стандартными потоками C и C ++. По умолчанию все стандартные потоки синхронизируются, что на практике позволяет смешивать ввод-вывод в стилях C и C ++ и получать разумные и ожидаемые результаты. Если вы отключите синхронизацию, потокам C ++ разрешено иметь свои собственные независимые буферы, что делает смешивание ввода-вывода в стилях C и C ++ приключением.
Также имейте в виду, что синхронизированные потоки C ++ являются потокобезопасными (вывод из разных потоков может чередоваться, но вы не получаете гонок за данные).
cin.tie(NULL);
Это развязывает cin
от cout
. Связанные потоки гарантируют, что один поток автоматически очищается перед каждой операцией ввода-вывода в другом потоке.
По умолчанию cin
привязан для cout
обеспечения разумного взаимодействия с пользователем. Например:
std::cout << "Enter name:";
std::cin >> name;
Если cin
и cout
связаны, вы можете ожидать, что вывод будет сброшен (т.е. станет видимым на консоли) до того, как программа запросит ввод от пользователя. Если вы развяжете потоки, программа может заблокировать ожидание, пока пользователь введет свое имя, но сообщение «Введите имя» еще не отображается (поскольку cout
по умолчанию оно буферизуется, вывод сбрасывается / отображается на консоли только по запросу или когда буфер заполнен).
Так что, если вы отвязываетесь cin
от cout
, вы должны обязательно промывать cout
вручную каждый раз, когда хотите что-то отобразить, прежде чем ожидать ввода cin
.
В заключение, узнайте, что делает каждый из них, поймите последствия, а затем решите, действительно ли вы хотите или нуждаетесь в возможном побочном эффекте повышения скорости.