Burada neler oluyor?
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 standardındaki Bölüm 6.4.3, bir seçim ifadesi koşulunda bildirilen değişkenlerin, koşul tarafından kontrol edilen altatmanların sonuna kadar nasıl genişleyen kapsama sahip olduğunu açıklar. Ama beyanın etrafına parantez koyamamakla ilgili bir şey söylediğini nerede görmüyorum, ne de koşul başına sadece bir beyan hakkında hiçbir şey söylemiyor.
Bu sınırlama, koşulda yalnızca bir beyanın gerekli olduğu durumlarda bile can sıkıcıdır. Bunu düşün.
bool a = false, b = true;
if(bool x = a || b)
{
}
Eğer 'if' -body kapsamını x'i yanlış olarak ayarlamak istersem, bu durumda bildirim için parantez gerekir (atama operatörü mantıksal OR'den daha düşük önceliğe sahip olduğundan), ancak parantez kullanılamadığından x'in dışında bildirim gerektirir vücut, bu bildirimi istenenden daha geniş bir kapsamda sızdırıyor. Açıkçası bu örnek önemsizdir, ancak daha gerçekçi bir durum, a ve b'nin test edilmesi gereken değerleri döndüren işlevler olduğu bir durum olacaktır.
Öyleyse yapmak istediğim şey standarda uymuyor mu, yoksa derleyicim toplarımı mı kırıyor (VS2008)?
while
ile aynıdır if
.
if (int a = foo(), int b = bar(), a && b)
? Virgül operatörü aşırı yüklenmemişse, standart ifadelerin soldan sağa değerlendirildiğini ve sonuç değerinin son ifade olduğunu söyler. for
Döngülerin başlatılmasıyla çalışır , neden burada olmasın?
if
çalıştığına göre önerildim ve yanlış varsayım gibi görünüyor.
if
.if
döngü değil, koşullu.