Вернуть вектор как авто из функции - PullRequest
0 голосов
/ 20 сентября 2018

Возможно ли вернуть std :: vector как auto?Например:

auto retVec() {
  std::vector<int> vec_l;

  l.push_back(1);
  l.push_back(2);

  return vec_l;
}
...
auto ret_vec = retVec();
for (auto& it : ret_vec) {
}

, когда я пишу что-то подобное, я получаю ошибку:

  1. ошибка: использование auto retVec() до вычета auto ---> auto ret_vec = retVec(**)**;
  2. ошибка: невозможно вывести auto&& из ret_vec ---> for (auto it : **ret_vec**) {

Как мне на самом деле написать это?

ОБНОВЛЕНИЕ : Извините.Я использую этот retVec как метод в классе, и он не работает.Когда я использую это как функцию в классе - все работает нормально.Моя ошибка в постановке вопроса.

Ответы [ 3 ]

0 голосов
/ 20 сентября 2018

Это работает с C ++ 14 (см. здесь ), а не с C ++ 11 ( здесь ).

0 голосов
/ 20 сентября 2018

Вы можете увидеть эту ошибку на Coliru при компиляции с -std=c++11, но она работает как задумано при компиляции с -std=c++14.

Обратите внимание, что gccдаже выводит подсказку при этом:

main.cpp: 8: 13: примечание: выведенный тип возврата доступен только с -std = c ++ 14 или -std = gnu ++ 14

Выведенный тип возврата с использованием auto действительно является функцией C ++ 14 , см. Пункт (3).

0 голосов
/ 20 сентября 2018

Вы компилируете для стандарта C ++ 11.Вам необходимо скомпилировать по крайней мере стандарт C ++ 14, поскольку выводимый тип доступен только начиная с C ++ 14.Ссылка гласит:

В объявлении функции, в котором не используется синтаксис конечного возвращаемого типа, ключевое слово auto указывает, что тип возвращаемого значения будет выведен из операнда оператора return, используяправила вывода аргументов шаблона.

...