Выполнение функции в условии if

Если я выполняю функцию в условии

if (function() == 0) {...}

она выполнится абсолютно также как и вне условия, это не влечет никаких побочных эффектов?

Чем такой вызов отличается от вызова вне условия?


Ответы (3 шт):

Автор решения: HolyBlackCat

Нет, это ни на что не влияет. Никакой разницы нет.


В соседнем ответе вспомнили про short-circuiting - свойство операторов && и || не вычислять второй операнд (и не вызывать в нем функции), и первого операнда достаточно для определения результата.

Но это происходит везде - и внутри условий if-ов, и снаружи.

→ Ссылка
Автор решения: Mikhailo

Если функция выполняется, то она выполняется точно так же, как и вне условия.

Вся тонкость в "если выполняется" - в сложном выражении с операторами && и ||, для которых справедливо сокращенное вычислоение, она может не выполниться. Сокращенное вычисление - это если вычисляя условия, в некоторый момент становится очевидно значение полного условия, то остальные части не вычисляются. Например, в A && B, если вычисление A дает false, каким бы ни было B - результат будет false. В таком случае B не вычисляется.

Так что в

if (i == 0 && function() == 0) 

при i, не равном 0, function() вычисляться просто не будет.

→ Ссылка
Автор решения: EOF

Также скажу, что в С++ может быть код, в котором вызов функции не приводит к её выполнению. Например, если вызов функции - это аргумент decltype:

#include <iostream>

int func()
{
    std::cout << "Hello from func!" << std::endl;
    return 123;
}

int main()
{
    decltype(func()) var;
    return 0;
}

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

→ Ссылка