在传统的C++中,将值传递给函数和方法对于大型对象来说是很慢的,并且通常不赞成.相反,C++程序员倾向于传递引用,这更快,但它引入了围绕所有权的各种复杂问题,特别是围绕内存管理(如果对象是堆分配的)
现在,在C++ 11中,我们有Rvalue引用和移动构造函数,这意味着可以实现一个大的对象(比如一个std::vector),它可以通过值传入和传出函数.
那么,这是否意味着默认值应该是传递类型实例的值,例如std::vector和std::string?自定义对象怎么样?什么是新的最佳做法?
我有一些pre-C++ 11代码,其中我使用const引用传递大量参数,如vector'很多.一个例子如下:
int hd(const vector<int>& a) {
   return a[0];
}
我听说使用新的C++ 11功能,您可以vector按如下方式传递by值而不会出现性能命中.
int hd(vector<int> a) {
   return a[0];
}
例如,这个答案说
C++ 11的移动语义使得即使对于复杂对象,传递和返回值也更具吸引力.
上述两个选项在性能方面是否相同?
如果是这样,何时比选项2更好地使用const参考?(也就是为什么我们仍然需要在C++ 11中使用const引用).
我问的一个原因是const引用使模板参数的推导变得复杂,并且如果它与const引用性能相同,则仅使用pass-by-value会容易得多.
为什么不vector::push_back采用转发引用而不是两次重载?我已经读过你想要在左值和右值上重载的唯一原因是你的函数是否为它们做了不同的事情,那么vector::push_back除了移动/复制之外,两个重载的不同之处是什么?