Объявление указателя С++ Const
Я просматриваю код, и я наткнулся на какой-то код, с которым я не знаком. После некоторых поисков я не мог придумать ни одного примера того, почему это сделано, или пользы от этой декларации.
myClass const * const myPtr = myClass->getPointer();
Является ли это объявлением указателя const или чем-то совершенно другим?
Ответы
Ответ 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