std::vector::push_back
有两个声明。我在某种程度上理解rvalue
和lvalue
。据我所知,几乎所有类型(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的内容被复制(或移动)到新的元素。
Lvalues不能绑定到右值引用,这意味着,当您使用左值参数调用std::vector<T>::push_back
时,仅可行的重载就是具有const T&
参数的那个。
Rvalues可以绑定到右值引用和const左值引用。因此,两个重载均适用]。但是根据C ++重载规则,将选择带有右值参考参数T&&
的重载。
您可以自己轻松尝试:
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"
}