假设我们有一个具有以下界面的对象:
struct Node_t {
... const std::vector< something >& getChilds() const;
} node;
现在,我使用auto
变量访问该属性,如下所示:
auto childs = node->getChilds();
childs
的类型是什么? std::vector< something >
或对一个人的引用?
答案 0 :(得分:24)
childs
的类型为std::vector<something>
。
auto
由与template type deduction相同的规则提供支持。此处选择的类型与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*
。
答案 1 :(得分:21)
这是一个std::vector<something>
。如果您想要参考,可以这样做:
auto & childs = node->getChilds();
这当然是一个const参考。
答案 2 :(得分:3)
auto
为您提供std::vector<something>
。您可以指定参考限定符auto &
,也可以使用decltype
:
decltype( node->getChilds() ) childs = node->getChilds();