2015-09-24 10 views
9

Niedawno natknąłem się na oświadczenie, które używa 1 == 1 zamiast prawdziwego.Użycie 1 == 1 lub true in While pętle

Przykład:

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

Zamiast:

while (true) 
{ 
    // Do something 
} 

Oboje wydają się być poprawne i generuje ten sam wynik, ale chciałem wiedzieć (oprócz dlaczego deweloper użyłby 1 == 1 zamiast prawdziwego - stylu/nawyku na bok) jaki wpływ ma to z perspektywy kompilatora, czy istnieje większe obciążenie w używaniu operatora porównania zamiast prawdziwego?

+5

Myślę, że nie ma różnicy, po prostu habbit – Backs

+0

czy "1 == 1" nie wymaga dodatkowego porównania za każdym razem, gdy warunek jest sprawdzany? A może kompilator zoptymalizuje to? – mmoment

+0

Nigdy nie widziałem powodu (while) (true) lub while (1 == 1), wydaje mi się leniwy, dlaczego nie mieć rzeczywistą zmienną, która może być ustawiona na false, aby wyjść z pętli? –

Odpowiedz

14

Nie ma różnicy. Kompilator zoptymalizuje je do tej samej IL.

1 == 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 

prawda

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 

Każdy wybór jednego lub drugiego jest czysto stylistycznych preferencji ze strony dewelopera.

+2

* '1 == 1' krzyczy," pamiętaj o swoim kroku, dzieje się coś śmiesznego "; * 'while (true)' może być mylone z wywołaniem funkcji (c.f. 'DoStuff (true)') podczas przeglądania kodu. –

+1

@KaspervandenBerg To z pewnością doskonały punkt do napisania dobrego kodu do samodzielnego dokumentowania. Chociaż osobiście uważam, że każdy przypadek skorzystałby z DUŻYCH bloków dokumentacji wokół niego, ponieważ potrzebujesz bardzo dobrego powodu, aby to zrobić. –

+0

Dzięki @DavidL, zupełnie zapomniałem o używaniu ildazmu do porównania obu stwierdzeń na poziomie IL. – Steve

Powiązane problemy