4

这个表格不能用我的 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)

...

为什么它不起作用?

4

2 回答 2

11

这是不合法的,因为您不能将语句用作表达式。

所以,不是在 anif中声明一个变量是非法的,而是比较。

就像:

(int x = 3) == 3;

是非法的,而

int x = 3;
x == 3;

不是。

于 2012-04-11T13:08:14.943 回答
0

如果您不想在范围内乱扔垃圾,可以使用 а{}块:

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

val最终将被销毁,}之后将不可见。

于 2012-04-11T14:39:36.647 回答