Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Константы в перечислениях
Перечисления (enum) не очень широко использовались в языке С по одной простой причине: символические имена констант имеют глобальную область действия и быстро захламляют пространство имен. В 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; // Нельзя, присвоение членам класса не допускается Константный указатель С константными указателями все наоборот: адрес изменять нельзя, но зато можно изменять содержимое памяти по этому адресу. int i = 17; int j = 29; int* const p; // Нельзя! Должно быть задано начальное значение int* const p1 = &i; // Порядок *p1 = 29; // Можно; величина, на которую ссылается //указатель, может изменяться p1 = &j; // Нельзя Date: 2016-07-25; view: 354; Нарушение авторских прав |