C ++ Как получить возврат ссылки и сохранить ссылку в виде локальной переменной в функции? - PullRequest
2 голосов
/ 08 января 2009

У меня есть функция внутри класса, которая возвращает ссылку на переменную-член.

std::vector<uint8> & getBuffer() const
{
   return m_myBuffer;
}

Теперь скажите, что в другом классе я вызываю этот метод:

int someFunction()
{
   std::vector<uint8> myFileBuffer = myFile.getBuffer();
}

Эта строка вызывает конструктор копирования вектора и делает меня локальным буфером. Я не хочу этого, как я могу вместо этого установить myFileBuffer для ссылки на myFile.getBuffer ().

Я знаю, что могу сделать это с помощью указателей, но хотел использовать ссылки, если это возможно.

Спасибо.

Ответы [ 2 ]

8 голосов
/ 08 января 2009

Обратите внимание, поскольку ваш метод-член const, вы должны возвращать ссылку на const.

// Note the extra const on this line.
std::vector<uint8> const& getBuffer() const
{
    return m_myBuffer;
}

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

std::vector<uint8> const& myFileBuffer = myFile.getBuffer();
4 голосов
/ 08 января 2009

Объявите вашу локальную переменную как ссылочный тип, а не тип значения, т. Е. Вот так ...

std::vector<uint8>& myFileBuffer = myFile.getBuffer();

... а не так ...

std::vector<uint8> myFileBuffer = myFile.getBuffer();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...