C++: библиотека программиста



Download 1,95 Mb.
Pdf ko'rish
bet20/144
Sana24.02.2022
Hajmi1,95 Mb.
#223123
TuriРеферат
1   ...   16   17   18   19   20   21   22   23   ...   144
Bog'liq
C -Eldjer-Djeff-for-Real-Programmers-RUS-www.itlibitum.ru

2


 20 
Не важно, будете ли вы изменять величину, на которую ссылается 
j
. Компилятор предполагает, что 
вам захочется это сделать, и на всякий случай устраняет искушение. Иначе говоря, константность — 
свойство переменной, а не данных, поэтому неконстантная переменная не может ссылаться на 
константную величину. 
const и #define 
Две следующие строки не эквивалентны: 
const int i = 17; 
#define i 17; 
В первой строке определяется переменная, занимающая некоторую область памяти, а во второй — 
макрос. Обычно отличия несущественны, если не считать одного-двух лишних тактов, затраченных на 
каждое обращение к константной переменной. Однако если переменная является глобальной и 
принадлежит нетривиальному классу со своим конструктором, ситуация резко меняется. 
Дополнительные сведения приведены в разделе «Инициализация глобальных объектов» этой главы. 
Константы в перечислениях 
Перечисления (епит) не очень широко использовались в языке С по одной простой причине: 
символические имена констант имеют глобальную область действия и быстро захламляют 
пространство имен. В C++ эта проблема исчезла, поскольку область действия символических имен 
ограничивается классом или структурой. 
class Foo { 
public: 
enum Status { kOpen = 1, kClosed }; 
}; 
// Где-то в программе 
Foo::Status s = Foo::kOpen; 
Обратите внимание — область действия должна быть явно указана как в имени типа, так и в 
символическом имени. Следовательно, символические имена 
kOpen
и 
kClosed
можно использовать в 
программе и для других целей. Компилятор рассматривает символические имена перечислений как 
макросы, а не как константные переменные. Это обстоятельство может оказаться важным при 
инициализации глобальных переменных (см, далее в этой главе). 
Указатель на константу 
С указателями дело обстоит несколько сложнее, поскольку приходится учитывать два значения: адрес 
и содержимое памяти по этому адресу. В следующем примере 
р
— это указатель на константу; 
находящийся в указателе адрес может измениться, но содержимое памяти по этому адресу — нет. 
const int* p; 
int i = 17; 
p = &i;
// Можно 
*p = 29;
// Нельзя 
Сказанное также относится к структурам и объектам. 
class foo { 
public: 
int 
x; 
}; 
const foo* f = new foo; 
f->x = 17; 
// Нельзя, присвоение членам класса не допускается 



Download 1,95 Mb.

Do'stlaringiz bilan baham:
1   ...   16   17   18   19   20   21   22   23   ...   144




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish