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