Эти два вызова имеют разные значения, которые не имеют ничего общего с производительностью; тот факт, что он ускоряет время выполнения, является (или может быть ) лишь побочным эффектом. Вы должны понимать, что делает каждый из них, и не включать их вслепую в каждую программу, потому что они выглядят как оптимизация.
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.
В заключение, узнайте, что делает каждый из них, поймите последствия, а затем решите, действительно ли вы хотите или нуждаетесь в возможном побочном эффекте повышения скорости.