为什么 -Wparentheses 不会对 if (int x = someFunc()) 发出警告?

Why -Wparentheses doesn't give warning for if (int x = someFunc())?

提问人:John Cooper 提问时间:1/17/2020 最后编辑:Vlad from MoscowJohn Cooper 更新时间:5/8/2020 访问量:65

问:

在使用 -Wparentheses 进行编译时,这将发出警告,这是可以理解的

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

但是当我们在 if 块中声明变量时,编译器不会发出警告。为什么?

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

g++(GCC)4.8.5版本

C++ IF-语句 表达式 声明 G++4.9

评论


答:

0赞 Vlad from Moscow 1/17/2020 #1

您不得将声明括在括号内。因此,在声明两边使用额外的括号会生成错误。

对于第一个 if 语句,则使用带有赋值运算符的表达式。因此,编译器会警告是否打算使用赋值。

在第二种情况下,有一个带有初始值设定项的声明。没有分配。条件的值由初始化后声明的变量的值是否等于零来确定。