C++-ban a while vagy a for ciklus fut le hamarabb azonos feltételekkel?
Gyorsan csináltam belőle Assembly kódot: [link]
Ez alapján teljesen ugyanazt az assembly kódot generálja a fordító (legalábbis gcc esetén). Tehát nincs semmi különbség a for és a while loop között ebben az esetben.
// Ez...
for (init; cond; inc) stms;
// ...a fordító számára ezt jelenti:
{
init;
while (cond) { stms; inc; }
}
#3
Ha pl. continue utasítást is használunk lehet különbség.
Ha a while-ban az inc elé írsz continue-t, akkor inc már nem fut le, még for esetében igen.
Tehát, ez a két dolog pl. nem lesz ugyanaz:
for(int i=0; i<10; ++i)
{
if(i ==5)
continue;
cout<<i;
}
ÉS ez:
int i=0;
while(i<10)
{
if(i==5)
continue;
cout<<i;
++i;
}
Az első esetben az 5 kivételével kiírja a számokat, a második végtelen ciklusba kerül, mert sosem növeli 5 után tovább az i-t.
While esetében ilyenkor figyelni kell, hogy a continue-n kívül, előtte növelni kell az i-t, ha azt akarjuk, hogy ugyanazt csinálja.
Így:
int i=0;
while(i<10)
{
if(i==5)
{
++i;
continue;
}
cout<<i;
++i;
}
Egy ideje c++ videókat csinálok Pretoript nevű youtube csatornámra és pont ez a dolog előkerült a legutóbbi videómban: [link]
Ezért jutott eszembe.
#4: Igaz, de a for/continue esetben nem a for a különleges (az pont ugyanúgy működik, ahogy leírtam), hanem a continue, ami "tudja", hogy milyen ugrási cím tartozik hozzá, vagyis az általam inc-nek nevezett utasítás címe.
While-on belül kicsit másképp működik a continue, ott a while blokk elejére ugrik. Én sem szó szerint értettem, hogy először csinál egy while() kódot és utána fordítja, hanem hogy tárgykód szintjén egyenértékű a kettő. A continue kódja egy másik történet.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!