这里发生了什么?
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)?
while
与相同if
。
if (int a = foo(), int b = bar(), a && b)
?如果逗号运算符未重载,则标准会说表达式是从左到右计算的,结果值是最后一个表达式。它与for
循环初始化一起使用,为什么不在这里?
if
,有人向我暗示了它是如何工作的,这似乎是错误的假设。
if
。if
不是循环,而是有条件的。