C++   ::   Хилл Мюррей

Страница: 84 из 357

Например:

char* strcpy(char* p, const char* q); // не можетизменить q

Указателю на константу можно присваивать адрес переменой, поскольку никакого вреда от этого быть не может. Однако нельзя присвоить адрес константы указателю, на который не было наложено ограничение, поскольку это позволило бы изменить значение объекта. Например:

int a = 1; const c = 2; const* p1 = amp;c; // ok const* p2 = amp;a; // ok int* p3 = amp;c; // ошибка *p3 = 7; // меняет значение c

Как обычно, если тип в описании опущен, то он предполагается int.



2.4.7 Перечисления

Есть другой метод определения целых констант, который иногда более удобен, чем применение const. Например:

enum (* ASM, AUTO, BREAK *);

перечисление определяет три целых константы, называемых перечислителями, и присваивает им значения. Поскольку значения перечислителей по умолчанию присваиваются начиная с 0 в порядке возрастания, это эквивалентно записи:

const ASM = 0; const AUTO = 1; const BREAK = 2;

Перечисление может быть именованным. Например:

enum keyword (* ASM, AUTO, BREAK *);

Имя перечисления становится синонимом int, а не новым типом. Описание переменной keyword, а не просто int, может дать как программисту, так и компилятору подсказку о том, что использование преднамеренное. Например:

keyword key;

switch (key) (* case ASM: // что-то делает break; case BREAK: // что-то делает break; *)

побуждает компилятор выдать предупреждение, поскольку только два значения keyword из трех используются.

Можно также задавать значения перечислителей явно. Например:

enum int16 (* sign=0100000, // знак most_significant=040000, // самый значимый least_signi

|< Пред. 82 83 84 85 86 След. >|

Java книги

Контакты: [email protected]