Язык программирования C++ для профессионалов


Поименованные константы - часть 2


char *const cp = "asdf"; // указатель-константа cp[3] = 'a'; // нормально cp = "ghjk"; // ошибка

Чтобы сделать константами и указатель, и объект, надо оба объявить const, например:

const char *const cpc = "asdf"; // указатель-константа на const cpc[3] = 'a'; // ошибка cpc = "ghjk"; // ошибка

Объект может быть объявлен константой при обращении к нему с помощью указателя, и в то же время быть изменяемым, если обращаться к нему другим способом. Особенно это удобно использовать для параметров функции. Описав параметр-указатель функции как const, мы запрещаем изменять в ней указуемый объект, например:

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

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

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




Начало  Назад  Вперед



Книжный магазин