有两个声明的std::vector::push_back
理解。我rvalue
和lvalue
在一定程度上。据我所知,几乎所有type(T&、T&&、T
)都可以转换为const T&
,那么当将不同类型的对象传递给时,编译器会选择哪种类型std::vector::push
?
我是C ++的新手,尽管我反复考虑了一下,但还是不明白这个想法。如果您能给我一些简单的例子来弄清楚,那就更好了。对于这个问题的帮助,我将不胜感激。
根据文档(http://www.cplusplus.com/reference/vector/vector/push_back/),它表示:
void push_back(const value_type&val);
void push_back(value_type && val);
在向量的最后一个元素之后的向量的末尾添加一个新元素。val的内容被复制(或移动)到新元素。
左值不能绑定到右值引用,这意味着,当您std::vector<T>::push_back
使用左值参数调用时,唯一可行的重载是带有const T&
参数的重载。
右值可以绑定到右值引用和常量左值引用。因此,两个重载均适用。但是根据C ++重载规则,T&&
将选择带有rvalue参考参数的重载。
您可以轻松地自己尝试以下操作:
void f(const int&) { std::cout << "L"; }
void f(int&&) { std::cout << "R"; }
int main()
{
int i = 0;
f(i); // prints "L"
f(0); // prints "R"
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句