Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том1)" -> 32

Visual С++ 6. Полное руководство: В 2 т.(том1) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том1) — Бином, 2006. — 569 c.
Скачать (прямая ссылка): vicualcc2006t1.djvu
Предыдущая << 1 .. 26 27 28 29 30 31 < 32 > 33 34 35 36 37 38 .. 204 >> Следующая

D = CD; // для чтения константы
CD = 5.0; // ОШИБКА: нельзя присвоить новое значение константе
++CD; // ОШИБКА: нельзя изменить значение типа const
Константную переменную можно инициализировать, используя как константное выражение (например, 5), так и другую переменную. Например, все приведенные ниже определения константных переменных являются корректными (первые два инициализируют константу с константными выражениями, а вторые два - с другими переменными).
void Func (int Parm) {
int I = 3;
const int CI1 = 5;
const int CI2 = 2 * sizeof (float);
const int CI3 = I;
const int CI4 = Parm;
}
Если константная переменная инициализирована выражением, содержащим другие переменные, то ее нельзя использовать для определения размерности массива. (Этот метод может оказаться некорректным для динамически создаваемого массива, размер которого определяется во время выполнения. В последнем параграфе главы проанализированы корректные методы выделения памяти динамическим массивам.) Например:
void Func (int Parm) {
const int CI1 = 100; const int CI2 = Parm;
char Bufl [СИ]; // правильно
char Buf2 [CI2]; // ОШИБКА: требуется константное выражение
}
Константные переменные используются так же, как символические константы, определяемые директивой препроцессора #define и традиционно применяемые в программах на языке С. Там, где требуется константное выражение, нужно инициализировать константную переменную константным выражением. Подобно константе, определяемой оператором #define, константная переменная может быть определена в файле заголовков, включенном в один или более исходных файлов, составляющих программу. В отличие от неконстантной переменной, константная по умолчанию является локальной для файла, в котором она определена. Иногда она может быть определена более чем в одном исходном файле, что не приводит к появлению ошибки при компоновке программы.
Примечание
Константная переменная имеет преимущества перед константой, определенной оператором #define, так как к ней можно обратиться с помощью символического отладчика.
Константы и указатели
Существует несколько способов использования ключевого слова const при объявлении указателя.
Во-первых, можно определить указатель на целочисленную константу:
const int *PCInt;
Допускается свободно изменять значение такого указателя, но не значение переменной, на которую он указывает, например:
COnst int А = 1;
int В = 2;
const int *PCInt; // не нужно инициализировать;
// PCInt не имеет тип const
PCInt = &А;
*PCInt =5; // ОШИБКА: нельзя изменять переменную
PCInt = SB;
// можно изменять PCInt
Обратите внимание: указателю peint может быть присвоен адрес целочисленной переменной, которая является константой или таковой не является. Однако, даже если этому указателю присвоен адрес переменной, не яшияющейся константой, его нельзя использовать для изменения переменной (в этом случае указатель служит для доступа "только для чтения" к переменной, допускающей чтение и запись).
Во-вторых, можно определить константный указатель на переменную, не являющуюся константой, например:
int N;
int *const CPInt = SN;
Так как этот указатель сам является константой, он должен быть инициализирован при определении, и впоследствии ему нельзя присваивать другой адрес, но его можно использовать для изменения значения переменной, на которую он указывает, например:
int А = 1; int В = 2;
int *const CPInt = SA; // нужно инициализировать указатель CPInt
*CPInt =5; // можно изменить переменную указатель
CPInt = SB; // ОШИБКА: нельзя изменить указатель
// типа const
В-третьих, можно определить константный указатель на константный объект. Однако инициализировать его нужно при определении. Нельзя изменить ни значение самого указателя, ни значение переменной, на которую он указывает.
Наконец, отметим, что нельзя присвоить адрес константной переменной указателю на переменную-неконстанту. В этом случае выбирается обходной путь изменения переменной, например:
const int N = 1; int *PInt;
Pint = SN; // ОШИБКА: нельзч присвоить адрес целочисленной
// константы указателю на целочисленную неконстанту
¦Pint =2; // Если бы присваивание было допустимо, это выражение // привело бы к изменению переменной-константы!
Константы и ссылки
Можно также определить ссылку на константный объект. Ссылки этого типа можно инициализировать, используя константную переменную
const int А = 1; const int SRCIntA = A;
или переменную-неконстанту
int В;
const int SRCIntB = В;
В обоих случаях ссылку нельзя использовать для изменения значения переменной, на которую она ссылается.
const int А = 1; const int SRCIntA = A;
int B;
const int SRCIntB = B;
RCIntA = 5; //ОШИБКА: нельзя изменять значение ссылки на константу RCIntB = 10; //ОШИБКА: нельзя изменять значение ссылки на константу
Если константная ссылка (т.е. ссылка на переменную типа const) инициализирована с использованием переменной-неконстанты, то она служит для этой переменной псевдонимом, предназначенным "только для чтения". Это и есть тот редкий случай, когда ссылка ведет себя не так, как переменная, на которую она ссылается.
Предыдущая << 1 .. 26 27 28 29 30 31 < 32 > 33 34 35 36 37 38 .. 204 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100