auto from const std :: vector <> &;объект или ссылка? - PullRequest
21 голосов
/ 10 января 2012

предположим, что у нас есть объект со следующим интерфейсом:

struct Node_t {
 ... const std::vector< something >& getChilds() const;
 } node;

Теперь я обращаюсь к свойству с помощью переменной auto, например:

auto childs = node->getChilds();

какой тип childs? std::vector< something > или ссылка на него?

Ответы [ 3 ]

24 голосов
/ 10 января 2012

Тип childs будет std::vector<something>.

auto работает по тем же правилам, что и удержание типа шаблона .Выбранный здесь тип такой же, как для template <typename T> f(T t); при вызове, например f(node->getChilds()).

Аналогично, auto& даст вам тот же тип, который будет выбран template <typename T> f(T& t);, иauto&& даст вам тот же тип, который будет выбран template <typename T> f(T&& t);.

То же самое относится ко всем другим комбинациям, таким как auto const& или auto*.

21 голосов
/ 10 января 2012

Это std::vector<something>. Если вы хотите ссылку, вы можете сделать это:

auto & childs = node->getChilds();

Это, конечно, постоянная ссылка.

3 голосов
/ 10 января 2012

auto дает вам std::vector<something>. Вы можете указать спецификатор ссылки auto & или, альтернативно, вы можете использовать decltype:

decltype( node->getChilds() ) childs = node->getChilds();
...