假设我们有一个具有以下接口的对象:
struct Node_t {
... const std::vector< something >& getChilds() const;
} node;
Run Code Online (Sandbox Code Playgroud)
现在,我使用如下auto变量访问该属性:
auto childs = node->getChilds();
Run Code Online (Sandbox Code Playgroud)
是什么类型的childs?a std::vector< something >或对一个的引用?
R. *_*des 24
类型childs将是std::vector<something>.
auto由与模板类型推导相同的规则提供支持.这里选择的类型与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*.
Ben*_*ley 21
这是一个std::vector<something>.如果您想要参考,您可以这样做:
auto & childs = node->getChilds();
Run Code Online (Sandbox Code Playgroud)
那当然是一个const参考.