указатель на ссылку в с ++ - PullRequest
3 голосов
/ 13 февраля 2012

Я видел некоторый код на c ++, который меня немного смущает:

class Myspa {};

vector<Myspa> myspa;

Myspa * myspa_p;

myspa_p = &myspa.at(0);

vector.at() функция возвратит ссылку на элемент, myspa_p - указатель, так что жеmyspa_p = &myspa.at(0) значит?

Ответы [ 2 ]

1 голос
/ 13 февраля 2012
Функция

vector.at () вернет ссылку на элемент, myspa_p - указатель, так что же означает myspa_p = & myspa.at (0)?

Когда вывозвращать ссылку, не думать о ссылке как о отдельном типе / объекте данных, на который может указывать указатель - есть только указатель myspa_p и вектор myspa и никакой загадочной третьей «вещи».Вместо этого думайте о ссылке как о способе предоставления доступа к объекту (здесь первый элемент myspa) на месте, без его копирования в любом месте.

Итак, myspa.at(0) предоставляет прямой доступ к исходномуОбъект Myspa внутри вектора myspa.Затем, добавление ведущего & - формирующего &myspa.at(0) - просто запрашивает адрес этого начального объекта - следовательно, адрес может быть сохранен в указателе myspa_p.

0 голосов
/ 13 февраля 2012

Этот код компилируется .. Переменная myspa_p указывает на первый элемент вектора myspa.

myspa_p содержит левое значение первого элемента вектора !!

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