Как я могу вернуть вектор по ссылке в C ++ - PullRequest
1 голос
/ 06 марта 2020

Я хочу сделать функцию, которая возвращает вектор по ссылке. Но возвращенный вектор (returned_v) - это не то же самое, что vec.v, а скопированный вектор. Это означает, что вектор возвращается по значению. Как я могу получить ссылочный вектор из vector_reference()?

class Vec {
  public:
    std::vector<int> v = {1, 2, 3};
    std::vector<int>& vector_reference() {
        return v;
    }
};

int main() {
    Vec vec;
    std::vector<int> returned_v = vec.vector_reference();
    returned_v.clear();
    std::cout << returned_v.size() << std::endl; // result: 0
    std::cout << vec.v.size() << std::endl; // result: 3

    return 0;
}

Ответы [ 2 ]

6 голосов
/ 06 марта 2020

returned_v является независимым объектом, который копируется из возвращаемого значения vec.vector_reference(). Вы должны объявить это как ссылку.

std::vector<int>& returned_v = vec.vector_reference();
0 голосов
/ 06 марта 2020

Ссылка в функции vector_reference() является ссылкой vec.v. Однако returned_v является копией vec.v, а не ссылкой на нее. Вам могут помочь два способа:

  1. std::vector<int>& returned_v = vec.vector_reference();

  2. std::vector<int> returned_v = std::move(vec.vector_reference()); //C++ 11

...