C++03存在隐式造成不必要的拷贝的问题。因此,C++11引入了rvalue引用
和移动语义
。现在我的问题是,这种不必要的拷贝问题是否也存在于诸如C#和Java之类的语言中,还是只是C++的问题?换句话说,rvalue引用
是否使C++11比C#或Java更加高效?
就C#而言(它允许运算符重载),假设我们有一个数学向量类,并且我们像这样使用它。
vector_a = vector_b + vector_c;
编译器将把vector_b + vector_c
转换为一个临时对象(我们称之为vector_tmp
)。我认为 C# 无法区分像
vector_tmp
这样的临时 rvalue 和像vector_b
这样的 lvalue,因此我们仍然需要将数据复制到vector_a
中。在 C++11 中,可以通过使用rvalue 引用
和移动语义
轻松避免这种情况。