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?