C kezdőknek
C ++ kezdők
3.5. const selejtező
Vegyük a következő példát kód:
Használata szó 512 két probléma. Az első az, hogy megkönnyítse a felfogása a program szövegét. Miért van a felső határa a ciklusváltozó egyenlőnek kell lennie pontosan 512? Mi rejlik e mögött az érték? Úgy tűnik, véletlenszerűen.
A második megoldandó probléma egyszerű módosításával és a fenntarthatóság. Tegyük fel, hogy egy program áll 10 000 sor és 512 szó található 4% -uk. Például az esetek 80%, a szám 512 legyen, ha változott 1024 Kepeinek bonyolítja a munkát, és a hibák száma tehető kijavításával rossz érték?
Mindkét problémát megoldani, ugyanakkor: szükség van egy olyan objektum létrehozása, amelynek értéke 512 hozzárendelésével egy értelmes nevet, mint bufSize fogjuk, hogy a program sokkal könnyebb megérteni: egyértelmű, milyen képest változó ciklust.
Továbbra is az egyik kis probléma: a változó bufSize itt egy l-érték, ami esetleg megváltoztathatja a program vezet a nehéz a hibákat. Itt az egyik leggyakoribb hibák - használata az értékadó operátor (=) helyett összehasonlítás (==):
Ennek eredményeként ez a kód bufSize érték egyenlő lesz 1, ami oda vezethet, hogy teljesen kiszámíthatatlan program viselkedésének. Ezek a hibák általában nagyon nehéz felismerni, mert egyszerűen nem lehet látni.
A használata const megoldja ezt a problémát. Kijelentve, hogy az objektumot
transzformáljuk változó konstans értéke 512, ami értéket nem lehet megváltoztatni: az ilyen kísérletek megállt a fordító: visszaélés értékadó operátor helyett összehasonlítva, mint ebben a példában, okoz a fordító hibát.
Időállandó nem kap értéket, akkor el kell indítani, azon a ponton, annak meghatározását. Meghatározása állandók nélkül inicializálása ez is okoz fordítási hibát:
Amennyiben a fordító, hogy egy ilyen feladatot? Mivel minWage - állandó, lehetetlen értéket rendelni. Másrészt semmi sem akadályozza meg, hogy megírjuk:
ahol cptr - a mutatót egy objektum típusú const kettős. A finomság abban rejlik, hogy a mutató önmagában - nem állandó, és ezért, meg tudjuk változtatni az értékét. Például:
Próbálok értéket rendelni egy const mutató okoz fordítási hibát:
A konstans pointer konstans az unió a két vizsgált esetben.
Sem az érték az objektum mutatott pi_ptr, sem az értéket a mutató nem lehet megváltoztatni a programban.
Gyakorlat 3.16
Magyarázza a jelentését az alábbi öt definíciókat. Vannak rossz?
Gyakorlat 3.17
Az alábbiak közül melyik meghatározások helyesek? Miért?