C за начинаещи

C ++ за начинаещи

3.5. Конст квалификант

Вземете следния примерен код:

Използването буквален 512 са два проблема. Първата е да се улесни възприемането на текста на програмата. Защо е горната граница на променливата на цикъла трябва да е равна точно на 512? Какво се крие зад тази стойност? Изглежда случаен.
Вторият проблем се отнася лекота на модификация и поддръжка. Да приемем, че програмата се състои от 10 000 линии и 512 буквален открити в 4% от тях. Така например, в 80% от случаите, броят 512 трябва да бъде, ако се промени до 1024. Възможността да се представим сложността на работата, както и броя на грешките, които може да се направи чрез коригиране на погрешно стойност?
И двете от тези проблеми са решени в същото време: необходимо е да се създаде обект със стойност 512. като я присвоите смислено име, като bufSize, ние ще направим програмата много по-лесно да се разбере: това е ясно за какво се сравнява с променлив цикъл.

Остава един малък проблем: променливата bufSize тук е л-стойност, която може случайно да се промени програмата, която ще доведе до по-трудните грешки улов. Това е една от най-честите грешки - използването на оператора за присвояване (=) вместо сравнение (==):

В резултат на този код bufSize стойност ще бъде равна на 1, което може да доведе до напълно непредвидимо поведение програма. Такива грешки обикновено са много трудни за откриване, защото те просто не могат да се видят.
Използването на Конст решава този проблем. Обявяването на обекта като

ние трансформира променлива с постоянна стойност от 512, чиято стойност не може да бъде променена: такива опити са спрени от компилатора: злоупотреба оператор задача вместо сравняване, както в този пример, ще доведе до грешка компилатор.

постоянен Времето не може да бъде определена стойност, тя трябва да се инициализира в точката на своето определение. Определяне на константите без инициализиране тя също предизвика грешка при компилация:

В случай, че компилаторът да позволи такава задача? От minWage - постоянно, не е възможно да се придаде стойност. От друга страна, нищо не ни пречи да се напише:

където cptr - указател към обект от тип Конст двойно. Изтънчеността се крие във факта, че самата показалеца - не е постоянен, и по тази причина, ние можем да променим стойността си. Например:

Опитвайки се да се придаде стойност на Конст показалка ще доведе до грешка при компилация:

Постоянна указател към константа е обединението на двете дела разгледани.

Нито стойността на обекта посочи pi_ptr, или стойността на показалеца не може да се промени в програмата.

Упражнение 3.16

Обяснете значението на следните пет дефиниции. Дали са наред?

Упражнение 3.17

Кое от следните определения са верни? Защо?