这是怎么回事?
if(int a = Func1())
{
// Works.
}
if((int a = Func1()))
{
// Fails to compile.
}
if((int a = Func1())
&& (int b = Func2()))
)
{
// Do stuff with a and b.
// This is what I'd really like to be able to do.
}
2003年标准中的6.4.3节解释了在选择语句条件中声明的变量如何具有扩展到条件控制的子语句末尾的作用域。但是我没有看到任何地方提到不能在声明前后加上括号,也没有提到每个条件只有一个声明。
即使在条件中只需要一个声明的情况下,这种限制也很烦人。
bool a = false, b = true;
if(bool x = a || b)
{
}
如果我想输入‘ If’-body 作用域,并且 x 设置为 false,那么声明就需要括号(因为赋值操作符的优先级比逻辑 OR 低) ,但是由于不能使用括号,所以它需要在主体之外声明 x,这样声明的作用域就会比预期的要大。显然,这个示例很简单,但是更现实的情况是,a 和 b 是函数,返回需要测试的值
那么,我想要做的是不符合标准的,还是我的编译器只是在捣乱(VS2008) ?