C pentru incepatori

C ++ pentru incepatori

3.5. calificativ const

Luați următorul exemplu cod:

Utilizarea literală 512 sunt două probleme. Primul este de a facilita percepția textului programului. De ce este limita superioară a variabilei bucla trebuie să fie egală cu exact 512? Ce se ascunde în spatele acestei valori? Se pare aleator.
A doua problemă se referă la ușurința modificării și mentenabilitate. Să presupunem că un program este format din 10 000 de linii și 512 literal găsite în 4% dintre ele. De exemplu, în 80% din cazuri, numărul 512 ar trebui să fie, dacă ați schimbat la 1024. Capacitatea de a prezenta complexitatea lucrării și numărul de erori care pot fi făcute prin corectarea valoare greșită?
Ambele aceste probleme sunt rezolvate în același timp: este necesar să se creeze un obiect cu o valoare de 512. Prin atribuirea un nume semnificativ, cum ar fi bufSize, vom face programul mult mai ușor de înțeles: este clar ce este comparat cu un ciclu variabil.

Rămâne o mică problemă: a bufSize variabilă aici este o l-valoare, care se poate schimba în mod accidental programul care va duce la o erori de captură dificile. Aici este una dintre cele mai frecvente greșeli - utilizarea operatorului de atribuire (=) în loc de comparație (==):

Ca urmare a acestui cod valoare bufSize va fi egală cu 1, ceea ce ar putea duce la un comportament de program complet imprevizibil. Astfel de erori sunt, de obicei, foarte dificil de detectat, deoarece acestea pur și simplu nu pot fi văzute.
Utilizarea constantei rezolvă această problemă. Declarând obiectul ca

vom transforma variabila cu o valoare constantă de 512, valoare care nu poate fi modificată: astfel de încercări sunt oprite de către compilator: operator de atribuire utilizarea abuzivă în loc de a compara, ca în acest exemplu, va provoca o eroare de compilare.

Constantă de timp nu poate fi atribuită o valoare, acesta trebuie să fie inițializat la punctul de definiția sa. Determinarea constantelor fără inițializează provoacă, de asemenea, o eroare de compilare:

În cazul în care compilatorul pentru a permite o astfel de misiune? Deoarece minWage - constanta, este imposibil să se atribuie o valoare. Pe de altă parte, nimic nu ne împiedică să scrie:

în cazul în care cptr - un pointer la un obiect de tip const dublu. Subtilitatea constă în faptul că indicatorul în sine - nu este constantă, și, prin urmare, putem schimba valoarea. De exemplu:

Încercarea de a atribui o valoare unui pointer const va provoca o eroare de compilare:

Un pointer constant la o constantă este unirea dintre cele două cazuri luate în considerare.

Nici valoarea obiectului indicat pi_ptr, fie valoarea indicatorului nu poate fi modificată în program.

Exercitarea 3.16

Explicați sensul următoarelor cinci definiții. Sunt greșit?

Exercitarea 3.17

Care dintre următoarele definiții sunt corecte? De ce?