const-pointer-to-type, pointer-to-const и терминология для обсуждения const - PullRequest
3 голосов
/ 05 августа 2011

Я полагаю, что я столкнулся с одной из причин того, что так много людей, похоже, смущены в отношении const, а именно в том, что термин " const pointer ", который кажется несколько противоречивым в этой номенклатурекогда говорят (даже те, кто понимает тонкости), кажется, часто означают " pointer-to-const " или:

  const Type * foo;

Однако, когда анализируется без априори знание соглашения ( например, новичками), в термине " const pointer " можно было бы разобрать, что "const" квалифицирует "указатель", и поэтому ожидать, что оно будет означать " const-pointer-to-type"или:

  Type * const foo;

Итак, мои вопросы:

  1. Является ли" const pointer"принятая терминология для "const Type *", несмотря на то, что она, по-видимому, является неправильным?
  2. Если это так, то каков обычный термин для const-pointer-to-type-type"или" Type * constупоминается в обсуждении?

Ответы [ 3 ]

3 голосов
/ 06 августа 2011

Да, const Type* foo обычно называется константным указателем.

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

Наконец, указатель на-const предполагает, что указанный объект является константным.Это не так, это может измениться, у вас есть только доступное только для чтения представление объекта.В этом смысле константность относится больше к указателю, чем к самому объекту.

3 голосов
/ 06 августа 2011

Да, обычно «const pointer» означает «указатель на const-объект», а не «указатель-это-const», и это, вероятно, потому, что первый сценарий является более распространенным, поэтому понятно, что ему можно присвоитьболее короткая форма.

Обычно для const-pointer-to-type вы либо просто скажете это, либо придерживаетесь обозначения: T* const.Такие указатели очень редко обсуждаются, поэтому, насколько я знаю, для них нет особенно распространенного выражения.

1 голос
/ 06 августа 2011

const - это так называемый классификатор. Это квалифицируется как следующее.

В случае с константным типом * var это означает, что значением типа является const, поэтому он называется const (ant) type pointer.

В случае типа * const var это означает, что значением var является const, поэтому он называется type pointer const (ant).

Обратите внимание на тонкую разницу между ними.

...