问题
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?
回答1:
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*.
回答2:
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.
回答3:
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();
来源:https://stackoverflow.com/questions/8797800/auto-from-const-stdvector-object-or-reference