Ссылка на указатель (int * const & arg) - PullRequest
1 голос
/ 16 апреля 2020

Что это такое:

int * const & arg

Является ли это

  • ссылкой на указатель int?
  • ссылкой на указатель const int?
  • const ссылка на указатель int?
  • const ссылка на указатель const int?

Кстати, ссылки на const не имеют никакого смысла для меня , Я думал, что вы не можете изменить ссылки после того, как они объявлены ...

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Является ли

ссылкой на указатель типа int?

Нет, потому что есть const.

ссылка на указатель const int?

Да. Для ясности лучше использовать тот же порядок, что и для декларации, за исключением обратного: A

reference to a const pointer to int.
&              const *          int

По сравнению с исходным, обратный порядок:

int * const &

a const ссылка на указатель int?

const ссылка на указатель const int?

Технически не существует такой вещи, как ссылка на const.

Хотя часто люди используют это, чтобы означать ссылку на const. При такой интерпретации константная ссылка на указатель int аналогична ссылке на константный указатель int. Кроме того, при такой интерпретации const ссылка на const имеет бессмысленное повторение const.

0 голосов
/ 16 апреля 2020

arg является ссылкой на int указатель , где сам указатель является постоянным.

При объявлении arg вы заметите что (поскольку это ссылка) она должна быть инициализирована, так как ссылки не могут ссылаться ни на что.

Простой способ убедиться в этом - использовать пример:

int x;
int* const ptr = &x;
// declare an integer pointer which is constant i.e. the address it stores does not change,
// and initialize this address to the address of x

int* const& arg = ptr;
// declare a reference variable called arg, which references an integer pointer which is constant,
// the same type that ptr is, and then make it reference our ptr variable

Поскольку const аргумент находится после "*" в вашей строке кода, вы говорите C ++, что сам указатель является константой. Однако, если бы мы написали либо

const int* & arg = ...

, либо

int const* & arg = ...

, мы бы сказали С ++, что указатель указывает на данные (в данном случае целое число), которые являются постоянными. Кроме того, если бы мы написали следующее

int const* const & arg = ...

, мы сказали бы C ++, что адрес, который хранит указатель, является постоянным, и что этот адрес указывает на целое число, которое также является постоянным.

Hope это помогло!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...