为什么以下代码在C++中是非法的

Saa*_*age 3 c++

我想创建一个if声明,分配和检查变量的位置.如果变量的值是可接受的,我想在if体内使用它.这是我认为我能做到的一个例子:

if ((int result = Foo()) != 0) {
    // use result
}
Run Code Online (Sandbox Code Playgroud)

我假设Foo()返回一些值,它被赋值给result赋值运算符=,并由赋值运算符返回,最后检0!= 0.不幸的是,它导致编译错误:

main.cpp:31:10: error: expected primary-expression before ‘int’
if ((int i = Foo()) != 0)
     ^                                          
main.cpp:31:10: error: expected ‘)’ before ‘int’
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种错误?有什么方法可以解决它?

Jon*_*ood 7

支持逻辑,但在if语句中声明变量并以这种方式使用它不是.原因与初始化程序的工作方式与常规赋值不同,但解决这个问题很简单.

只是做这样的事情.

int result;

if ((result = Foo()) != 0) {
    // use result
}
Run Code Online (Sandbox Code Playgroud)

  • "不支持在if语句中声明变量" - 实际上是.编写if(int result = Foo()){/*use result*/}编译并按预期工作. (3认同)
  • 这是不正确的,你可以在if语句的条件下声明一个变量,草案标准部分`6.4p3` (3认同)
  • ...如果希望`result`具有与`if`语句绑定的特定生命周期,则添加其他范围. (2认同)