Если я выполняю функцию в условии
if (function() == 0) {...}
она выполнится абсолютно также как и вне условия, это не влечет никаких побочных эффектов?
Чем такой вызов отличается от вызова вне условия?
Нет, это ни на что не влияет. Никакой разницы нет.
В соседнем ответе вспомнили про short-circuiting - свойство операторов &&
и ||
не вычислять второй операнд (и не вызывать в нем функции), и первого операнда достаточно для определения результата.
Но это происходит везде - и внутри условий if
-ов, и снаружи.
Если функция выполняется, то она выполняется точно так же, как и вне условия.
Вся тонкость в "если выполняется" - в сложном выражении с операторами &&
и ||
, для которых справедливо сокращенное вычислоение, она может не выполниться. Сокращенное вычисление - это если вычисляя условия, в некоторый момент становится очевидно значение полного условия, то остальные части не вычисляются. Например, в A && B
, если вычисление A
дает false
, каким бы ни было B
- результат будет false
. В таком случае B
не вычисляется.
Так что в
if (i == 0 && function() == 0)
при i
, не равном 0, function()
вычисляться просто не будет.
Также скажу, что в С++ может быть код, в котором вызов функции не приводит к её выполнению. Например, если вызов функции - это аргумент decltype
:
#include <iostream>
int func()
{
std::cout << "Hello from func!" << std::endl;
return 123;
}
int main()
{
decltype(func()) var;
return 0;
}
Этот код ничего не отобразит на экране, потому что чтобы определить тип возвращаемого значения, можно просто посмотреть его не вызывая функцию.
у меня проблема с одновременной обработкой запросов 2х и/или более клиентовкогда подключаются 2 или более клиенты к моему серверу сервер...
В общем есть два класса, один для хранения, другой для добавления строк в базу данныхПолный код программы: