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

lur*_*her 21 c++ auto c++11

假设我们有一个具有以下接口的对象:

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*.

  • `&&`表示右值参考.这是一个C++ 11的功能,就像`auto`一样.`auto &&`可以成为左值引用(即"正常"引用,如`&`)或右值引用. (2认同)
  • 这是一个解释它的问题:http://stackoverflow.com/questions/5481539/what-does-t-mean-in-c0x (2认同)

Ben*_*ley 21

这是一个std::vector<something>.如果您想要参考,您可以这样做:

auto & childs = node->getChilds();
Run Code Online (Sandbox Code Playgroud)

那当然是一个const参考.

  • C++让它很容易意外地调用一个拷贝构造函数:( (10认同)