应该if((int val = getvalue())== x)表单是否有效

时间:2012-04-11 13:00:27

标签: c++

此表单无法使用我的VS2008编译器进行编译。应该可以吗?

#include <iostream>
using namespace std;

int getvalue() { return 3; }

int main(int argc, char* argv[])
{
if((int val = getvalue()) == 3)
    cout << "val=" << val << "\n";
return 0;
}

此表格确实有效。     ...

int val;
if((val = getvalue()) == 3)

...

为什么不起作用?

2 个答案:

答案 0 :(得分:11)

这不合法,因为你不能将陈述用作表达。

所以,并不是在if内声明变量是非法的,而是比较。

就像:

(int x = 3) == 3;

是非法的,而

int x = 3;
x == 3;

不是

答案 1 :(得分:0)

如果您不想在您的范围内乱丢垃圾,可以使用{}阻止:

...
{
  int val;
  if((val = getvalue()) == 3) { 
  ... 
  }
}
...

val将在最后}被销毁,之后将无法显示。