Объявление указателя С++ Const - программирование
Подтвердить что ты не робот

Объявление указателя С++ Const

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

myClass const * const myPtr = myClass->getPointer();

Является ли это объявлением указателя const или чем-то совершенно другим?

4b9b3361

Ответ 1

Это означает, что myPtr является указателем const для const myClass ". Это означает, что вы не можете изменять то, что указатель указывает на этот указатель, и вы не можете сделать указатель в другом месте после его инициализации (по возвращенному значению myClass->getPointer()). Так что да, вы в основном правы, добавив, что он также указывает на объект const (насколько вам известно, на самом деле это может быть не const).

Помните, что const применяется к элементу слева от него (или если в левой части нет элемента, элемент справа). Первый const делает myClass const (где вы не можете изменить то, на что указывает указатель), а второй const создает * const (где вы не можете изменить сам указатель).

Ответ 2

В некоторых случаях вы можете видеть, что это написано так:

const myClass * const myPtr = myClass->getPointer(); 

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

Object * const obj;        // read right-to-left:  const pointer to Object
Object const * obj;        // read right-to-left:  pointer to const Object
Object const * const obj;  // read right-to-left:  const pointer to const Object 

Ответ 3

Правило заключается в том, что ключевое слово const применяется к "слову" слева от него, если только это не первое слово в строке, и в этом случае оно относится к "слову" справа от него. Итак: myClass const * const: myClass < - const, pointer < - const, const указатель на const myClass.

По какой-то причине в большинстве кодов (по крайней мере, тот, что я видел) это будет объявлено как const myClass * const. Почему у меня нет подсказки, потому что теперь вам нужно принять исключение, чтобы "const относится к слову слева, если только это не первое слово в строке". I.e.: Написание строк, которые они делают в коде, который вы просматриваете, намного яснее.

Ответ 4

Сет на деньги. Там есть еще несколько полезных ссылок на Duramecho.

Ответ 5

Это объявляет постоянный указатель на постоянное значение, возвращаемое вызовом функции-члена указателя разыменования myClass