这是怎么回事?
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)?
最佳答案
从 C++17 开始,你试图做什么 is finally possible :
if (int a = Func1(), b = Func2(); a && b)
{
// Do stuff with a and b.
}
注意使用;
代替,
来分隔声明和实际情况。
关于C++, 'if' 表达式中的变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32128276/