2015-09-24 23 views
9

Son zamanlarda doğru yerine 1 == 1 kullanan bir while deyimi ile karşılaştım.while döngülerinde 1 == 1 veya true kullanımı

Örnek:

while (1 == 1) 
{ 
    // Do something 
} 

yerine: Her ikisi de doğru ve aynı sonucu üretmek için görünür

while (true) 
{ 
    // Do something 
} 

ama ben ayrı bir geliştirici 1 == neden kullanacağınızı dan (öğrenmek istedi Bunun yerine, gerçek - stil/alışkanlık bir yana, bunun bir derleyici perspektifinden ne gibi bir etkisi olduğu, gerçek yerine karşılaştırma operatörünün kullanılmasında daha büyük bir yük var mı?

+5

Sanırım, hiçbir fark yok, sadece habbit – Backs

+0

yapamazsın 1 == 1', koşul her kontrol edildiğinde ekstra bir karşılaştırmaya gerek duymaz mı? Yoksa derleyici bunu optimize eder mi? – mmoment

+0

(gerçek) veya (1 == 1) süresinin nedenini hiç görmedim, bana tembel geliyor, neden döngüden çıkmak için yanlış olarak ayarlanabilecek bir gerçek değişkene sahip değiliz? –

cevap

14

Fark yoktur. Derleyici bunları aynı IL'ye göre optimize eder.

IL_0000: nop   
IL_0001: br.s  IL_0005 
IL_0003: nop   
IL_0004: nop   
IL_0005: ldc.i4.1  
IL_0006: stloc.0  // CS$4$0000 
IL_0007: br.s  IL_0003 

Herhangi birinin seçimi veya diğer tamamen geliştirici adına üslup tercihi 1

IL_0000: nop   
IL_0001: br.s  IL_0005 
IL_0003: nop   
IL_0004: nop   
IL_0005: ldc.i4.1  
IL_0006: stloc.0  // CS$4$0000 
IL_0007: br.s  IL_0003 

gerçek ==.

+2

* '1 == 1' çığlıklar," adımınızı aklınıza getirin; burada komik şeyler oluyor "; * '(true)', kodu gözden geçirirken bir işlev çağrısıyla (c.f. 'DoStuff (true)') karıştırılabilir. –

+1

@KaspervandenBerg Bu, iyi bir kendini belgeleyen kod yazma konusunda kesinlikle mükemmel bir nokta. Şahsen, her iki durumda da, bunu yapmak için çok iyi bir nedene ihtiyaç duyduğunuzdan, etrafındaki büyük bir dokümantasyon belgesinden yararlanacağını düşünüyorum. –

+0

Teşekkürler @DavidL, iki beyanı bir IL seviyesinde karşılaştırmak için ildasm kullanmayı tamamen unutmuşum. – Steve