Reputation: 26973
suppose we have an object with the following interface:
struct Node_t {
... const std::vector< something >& getChilds() const;
} node;
Now, i access the property with an auto
variable like this:
auto childs = node->getChilds();
what is the type of childs
? a std::vector< something >
or a reference to one?
Upvotes: 21
Views: 10386
Reputation: 234584
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*
.
Upvotes: 24
Reputation: 3918
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();
Upvotes: 3
Reputation: 103733
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.
Upvotes: 21