Функция c ++: передать неконстантный аргумент в константный ссылочный параметр - PullRequest
6 голосов
/ 03 февраля 2012

предположим, у меня есть функция, которая принимает передачу аргумента константной ссылки,

int func(const int &i)
{
  /*    */
}

int main()
{
  int j = 1;
  func(j); // pass non const argument to const reference
  j=2; // reassign j
}

этот код работает нормально. Согласно праймеру C ++, как выглядит этот аргумент, передаваемый этой функции:*

, в котором i является синонимом (псевдонимом) j,

мой вопрос: если i является синонимом j, и я определен как const, это код:

const int & i = j

redelcare переменная не const в переменную const?почему это выражение допустимо в c ++?

Ответы [ 2 ]

16 голосов
/ 03 февраля 2012

Ссылка является константой, а не объектом. Это не меняет того факта, что объект является изменчивым, но у вас есть одно имя для объекта (j), с помощью которого вы можете изменить его, и другое имя (i), через которое вы не можете.

В случае ссылочного параметра const это означает, что main может изменять объект (поскольку он использует для него свое имя, j), тогда как func не может изменять объект, пока он использует только его имя, i. func может в принципе изменить объект, создав еще одну ссылку или указатель на него с помощью const_cast, но не.

4 голосов
/ 03 февраля 2012
const int &i = j;

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

Вы все еще можете изменить значение, используя исходное имя переменной j, просто не используя постоянную ссылку i.

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