這是怎麼回事?C++,'if'表達式中的變量聲明
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年的標準expains在選擇語句條件中聲明的變量怎麼也延伸到由條件控制的substatements結束範圍6.4.3節。但是我沒有看到它說什麼不能在括號中加括號,也沒有說每個條件只有一個聲明。
即使在只需要一個聲明的情況下,這個限制也很煩人。考慮這一點。
bool a = false, b = true;
if(bool x = a || b)
{
}
如果我想進入與X設置了「如果「體區範圍爲假,則需要申報括號(因爲賦值運算符比邏輯或優先級低),但由於括號不能使用它需要在體外聲明x,將聲明泄漏到比想要的更大的範圍,顯然這個例子是微不足道的,但更實際的情況是a和b是返回需要測試的值的函數
那麼我想做的是不符合標準,還是我的編譯器只是在破解我的球(VS2008)?
「如果我想用」< - 你的例子有'if'來輸入循環。 'if'不是一個循環,它是一個條件。 – crashmstr
@crashmstr:true,但'while'的條件與'if'的條件相同。 –
這不能用逗號操作符來完成嗎?我的意思是:'if(int a = foo(),int b = bar(),a && b)'?如果逗號運算符沒有超載,則該標準說明表達式從左到右進行計算,結果值是最後一個表達式。它適用於for循環初始化,爲什麼不在這裏? – Archie