Почему -Wpherheses не выдает предупреждение для if (int x = someFun c ())? - PullRequest
0 голосов
/ 17 января 2020

При компиляции с - Wparentheses это выдаст предупреждение, и это будет понятно

if (myVar= myFunct(param1)) {
     // do some stuff
}

, но когда мы объявляем переменную внутри блока if, компилятор не выдает предупреждение. Почему?

if (int myVar= myFunct(param1)) {
     // do some stuff
}

г ++ (G CC) 4.8.5

1 Ответ

0 голосов
/ 17 января 2020

Вы не можете заключить в скобки декларацию. Таким образом, использование дополнительных скобок вокруг объявления приведет к ошибке.

Что касается первого оператора if, то используется выражение с оператором присваивания. Поэтому компилятор предупреждает, предназначено ли использование присвоения.

Во втором случае есть объявление с инициализатором. Там нет назначения. Значение условия определяется тем, равно ли значение объявленной переменной после инициализации нулю или нет.

...