关于`std :: vector :: push_back`的小数的选择

问题描述 投票:0回答:1

std::vector::push_back有两个声明。我在某种程度上理解rvaluelvalue。据我所知,几乎所有类型(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的内容被复制(或移动)到新的元素。

c++ c++11 rvalue
1个回答
1
投票

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"
}
© www.soinside.com 2019 - 2024. All rights reserved.