Странное объявление неиспользуемой статической строки в коде C ++ - PullRequest
0 голосов
/ 25 июня 2018

Сегодня на популярном сайте по решению проблем я представил решение проблемы, а затем посмотрел более быстрый код, чтобы выяснить, по какой причине его код работает быстрее, чем мой.Общий алгоритм был таким же, но основное отличие, которое я обнаружил, заключается в следующем:

static string x = [](){
    std::ios::sync_with_stdio(false);
    cin.tie(nullptr);
    return "";
}();

Я также не понимал, что cin.tie(nullptr) здесь делает.Я читал о

ostream * tie (ostream * tiestr);

, но не смог понять, что здесь делает эта строка.

Примечаниечто я уже знаю тот факт, что std::ios::sync_with_stdio(false) прекратит тратить время на синхронизацию операции ввода-вывода printf/scanf со счетной частью C ++ cin/cout.

Я уже догадывался, что код внутри блока выполняется еще до того, как запускается основная функция, но я понятия не имею, какова истинная причина этой конструкции.

Извинитеза мой плохой английский, ваша помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 25 июня 2018

Как вы уже догадались, большинство из них:

  • выполняется перед основной, инициализируя статическую переменную с помощью лямбды
  • отключает операции ввода-вывода, которые замедляютсяисполнение:
    • std::ios::sync_with_stdio
    • cin.tie(nullptr) отвяжет cin от cout.См. Ниже
  • инициализация строки, подобной этой, не является дорогостоящей, поскольку она не приведет к выделению кучи для пустой строки

от cplusplus.com:

Связанный поток является объектом выходного потока, который сбрасывается перед каждой операцией ввода-вывода в этом объекте потока

Я полагаю, что эта проблема принимает входные данные от cin, и выответьте на cout, с этого момента запись на cout будет быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...