Инициализация C ++ Reference - почему бы не использовать оператор адреса? - PullRequest
0 голосов
/ 28 марта 2012

Почему инициализация ссылок C ++ работает без оператора "адрес-адрес" (который является &)?
Не является ли неправильным присвоение объекта с типом A ссылке с типом A&?
Разве в задании не должен использоваться оператор "&" с правой стороны?

int var = 2
int& ref = var  //why can we assign var of type 'int' to ref of type 'int&'?
int& ref = &var //shouldn't it be like that, so that we will assign the ADRESS to the reference?

РЕДАКТИРОВАТЬ: Подводя итог:

  • Ссылкиявляются альтернативными именами для объектов.
  • Тип ссылок создается путем добавления символа '&' к типу ссылочного объекта.
  • Ссылки совпадают с ссылочными объектами в каждом контексте.
  • Они не хранят память объекта, как это делают указатели, наличие оператора 'adress-of' & '&'вводил в заблуждение здесь.

Ответы [ 3 ]

3 голосов
/ 28 марта 2012

Ссылка не содержит адрес объекта, как вы подразумеваете из ваших комментариев. Это указатель. ссылки! = Указатели .

Ссылка - это псевдоним объекта, поэтому этот тип назначения работает.

0 голосов
/ 28 марта 2012

«Я знаю, что компиляторы реализуют ссылки как указатели»

Нет, они не делают.Это распространенный источник путаницы.Когда вы делаете это:

int p;
int *r = &p;

Вы создаете, скажем, 32-битный указатель в память, который вы можете использовать для манипулирования данными.

Однако, когда вы делаете это:

int p;
int& r = p;

Вы не используете указатель на p.Есть объект p, который может находиться в регистре, стеке или куче, это не важно.Объявление означает, что r также ссылается на тот же объект.Это не указатель на объект: если сделать указатель, вы создаете новый объект.Вы говорите "г указывает на р."Однако, используя ссылку, вы говорите "r is p."Новый объект не создается (указатель).Для всех намерений и целей int & r равно p, потому что любое его использование ссылается на (не указывает на) стр.

Позвольте мне выразиться так:

Это как сказать, что есть этот человек, Дэйв.Он живет по (вымышленному адресу)

Это указывает на Дейва.

И затем у него есть псевдоним OrgnlDave.

OrgnlDave не указывает на Дейва, это это Дейв, это просто еще один способ сказать это.Есть только один Дейв.Сказать «привет, OrgnlDave» - это то же самое, что сказать «привет, Дейв», что отличается от отправки письма Дейву.

В псевдокоде

person Dave;
address(Dave, made-up-address) pointer;
person& OrgnlDave means Dave; // and we indicate that by using the &

Hi(pointer);   // Sends Dave a cordial letter
Hi(Dave);      // Says hi to Dave
Hi(OrgnlDave); // Says hi to Dave
0 голосов
/ 28 марта 2012

int & - это тип

& var - это операция для получения адреса.

Тот же символ.Совершенно разные отличия.Вероятно, он разработан специально для того, чтобы C ++ был недоступен для новичков.

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