c ++: оценка оператора if в лямбда-функции - PullRequest
0 голосов
/ 12 сентября 2018

Предположим, у меня есть следующий фрагмент кода:

bool flag = true;

auto myFunction = [](int a, int b, bool flag)
    {
        if (flag)
        {
            // do something with a and b
        }
    }

Позже в коде я вызываю myFunction тысячи раз в цикле, для того же значения flag.

Затем у меня есть другой цикл, который также вызывает myFunction тысячи раз, но для другого значения flag.

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

Мой вопрос: будет ли компилятор вычислять оператор if до того, как"скопирует" встроенную функцию, и, таким образом, не придется выполнять эту проверку на каждой отдельной итерации?

Отказ от ответственности:

  1. Я знаю, что это может относиться к категории микрооптимизации, но я все же хотел бы получить ответ.
  2. Мой пример глупый; Я мог бы просто поместить операторы if вне циклов. Но это просто репрезентативный пример гораздо более сложного случая.
  3. Мое использование лямбда-функций основано на ответе на этот вопрос.

Спасибо!

1 Ответ

0 голосов
/ 12 сентября 2018

Мой вопрос: будет ли компилятор вычислять оператор if перед «копированием» встроенной функции и, следовательно, не должен будет выполнять эту проверку на каждой отдельной итерации?

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

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