在 c++11 之前的 vector.push_back(const & T val) 中按值调用和按右值调用有什么区别

what's the difference between call by value and call by rvalue reference in vector.push_back(const & T val) before c++11

提问人:hhu_clj 提问时间:8/23/2023 最后编辑:Ted Lyngmohhu_clj 更新时间:8/23/2023 访问量:22

问:

由于在 C++ 11 之前不支持右值引用,因此没有移动构造函数。参数使它甚至对临时使用复制构造函数,这与通过按值参数调用复制构造函数相同吗?允许接收正确的值,那么为什么不按值传递呢?const T&std::vectorvoid push_back(const T& Val)Val

另一个问题是:为什么可以获得正确的值?const T&

C++11 rvalue-reference 按值调用

评论

0赞 Ted Lyngmo 8/23/2023
我试图尽可能地重新表述这个问题——我理解它。我希望我没有为你毁掉它。
0赞 Ted Lyngmo 8/23/2023
如果我理解正确的话,按价值计算将意味着总是制作两个副本而不是一个副本。
0赞 hhu_clj 8/24/2023
'when template T is int' vector::p ush_back(const int& num){//befror c++11, call copy constructor, assign 1 to num(is that right?) ...//在 C++11 之后,调用 move constructor 使其成本更低 } vector::p ush_back(int num){//按值调用 ... } vector<int> v;v.push_back(1);// 通过复制构造函数进行赋值的成本是否与按值调用的成本相同?如果是一样的,为什么不使用第二种方式呢?
0赞 hhu_clj 8/24/2023
我明白了,谢谢你的回答。如果是按值调用,先调用复制构造函数:将 1 分配给 num,然后再调用复制构造函数:构造参数复制到数据容器的尾部;如果按引用调用,它将只调用一次复制构造函数将 1 分配给 NUM。
0赞 Ted Lyngmo 8/24/2023
当您有基本类型时,最好按值来获取它们,但它也需要很好地与更大的用户或实现定义的类型(如 )配合使用。std::string

答: 暂无答案