Как интерпретировать объявления переменных с правилом справа налево, когда включен typedef? - PullRequest
0 голосов
/ 01 апреля 2019

У меня возникают проблемы при использовании правила справа налево для интерпретации объявлений переменных, когда задействован typedef.

В 5-й книге по C ++ primer я увидел следующий код:

typedef char *pstring;
const pstring cstr = 0; // cstr is a constant pointer to char
const pstring *ps; // ps is a pointer to a constant pointer to char

Если я заменил pstring на char *, то он выглядит так:

const char *cstr

Так что я ожидаю, что cstr будет указателем на const char.Но в комментариях в книге говорится, что сам указатель является постоянным.Мой вопрос в том, что не так с моим мышлением.

Ответы [ 2 ]

2 голосов
/ 01 апреля 2019

A typedef не является макросом. Вы не просто заменяете текст.

Прочитайте как cstr - это «константа pstring», которая является «константой (указатель на символ)». Сравните это с const char*, который является "указателем на постоянную char".

Если бы вы заменили typedef, он бы выглядел так:

char* const cstr = 0;
char* const* ps;
1 голос
/ 02 апреля 2019

Как можно прочитать здесь :

Если тип массива объявлен с квалификатором типа const (с помощью typedef), тип массива не является постоянным.квалифицированный, но его тип элемента

Поскольку pstring имеет typedef для char *, const pstring cstr равен char * const cstr, а не const char * cstr.

...