Подтвердить что ты не робот

Auto from const std::vector <> &; объект или ссылку?

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

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

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

auto childs = node->getChilds();

каков тип childs? a std::vector< something > или ссылку на один?

4b9b3361

Ответ 1

Тип 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*.

Ответ 2

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

auto & childs = node->getChilds();

Это, конечно, будет ссылкой на константу.

Ответ 3

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

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