来自const std :: vector<>&amp ;;对象或参考?

时间:2012-01-10 02:20:03

标签: c++ c++11 auto

假设我们有一个具有以下界面的对象:

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

现在,我使用auto变量访问该属性,如下所示:

auto childs = node->getChilds();

childs的类型是什么? std::vector< something >或对一个人的引用?

3 个答案:

答案 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();