suppose we have an object with the following interface:
struct Node_t {
... const std::vector< something >& getChilds() const;
} node;
The type of childs
will be std::vector<something>
.
auto
is powered by the same rules as template type deduction. The type picked here is the same that would get picked for template <typename T> f(T t);
in a call like f(node->getChilds())
.
Similarly, auto&
would get you the same type that would get picked by template <typename T> f(T& t);
, and auto&&
would get you the same type that would get picked by template <typename T> f(T&& t);
.
The same applies for all other combinations, like auto const&
or auto*
.
It's an std::vector<something>
. If you want a reference, you can do this:
auto & childs = node->getChilds();
That will of course be a const reference.
auto
gives you std::vector<something>
. You can either specify reference qualifier auto &
or, alternatively, you can use decltype
:
decltype( node->getChilds() ) childs = node->getChilds();