На какой адрес & quot; & ref_var & quot; указывает на?

Рассмотрим следующий код:

std::vector &MyClass::getVector() const
{
return (myVec);
}

void aFunc()
{
std::vector *vec = &myClassInstance.getVector();
}

На какой адрес указывает vec? Указывает ли это на сам адрес myVec в объекте myClassInstance? (кстати, я знаю, что должен вернуть const ref, но это пример).

-1

Решение

Вы возвращаете ссылку на myVec в методе getVector, Когда вы берете адрес ссылки, вы получаете адрес переменной, на которую ссылается ссылка. Так vec будет содержать адрес myVec,

3

Другие решения

Ссылка — это псевдоним другой переменной. Когда вы возвращаете ссылку наmyVec от getVector() тогда вы можете рассмотреть вызов функции точно так же, как доступ к myVec если бы это было публично доступно.

&MyClass.myVec == &myClassInstance.getVector()

На какой адрес указывает vec?

Адрес myClassInstance.getVector() будет таким же, как адрес myVec,

Также обратите внимание, что, так как вы возвращаете ссылку на lvalue, вы можете даже использовать ее в левой части назначения, например

myClassInstance.getVector() = some_other_vector;

И сейчас myVec будет копия some_other_vector,

2

Да, это указывает на самый вектор myVec в вашем экземпляре MyClass. Смотрите следующий пример кода:

#include <cstdio>
#include <vector>

class MyClass {
std::vector<int> myVec;

public:
MyClass() {}
~MyClass() {}

std::vector<int>& getVector()
{
return myVec;
}

void printVector() const
{
for(std::vector<int>::const_iterator it = myVec.begin(); it != myVec.end(); ++it)
{
printf("%d ", *it);
}
printf("\n");
}
};

int main(int, char**)
{
MyClass item;

std::vector<int>* vec = &(item.getVector());

vec->push_back(1);
item.printVector();

return 0;
}

Запуск этой программы приведет к выводу:

$ ./a.out
1

Таким образом, вы можете увидеть, что призвание getVector() возвращает ссылку на myVec из экземпляра MyClass, так как мы добавляем новый элемент в вектор (vec->push_back(1)) через vec затем указатель напечатает вектор экземпляра MyClass, и он показывает, что элемент, который мы добавили, находится в myVec,

0
По вопросам рекламы [email protected]