这里发生了什么?
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)
{
}
如果我想在 x 设置为 false 的情况下进入“if”-body 范围,则声明需要括号(因为赋值运算符的优先级低于逻辑 OR),但由于不能使用括号,因此需要在外部声明 x身体,将该声明泄漏到比预期更大的范围。显然这个例子是微不足道的,但更现实的情况是 a 和 b 是返回需要测试的值的函数
那么我想做的事情是不符合标准的,还是我的编译器只是破坏了我的球(VS2008)?