У С++ 03 была проблема с ненужными копиями, которые могли бы произойти неявно. Для этой цели в С++ 11 были введены rvalue references
и move semantics
. Теперь мой вопрос в том, что эта ненужная проблема копирования также существует в таких языках, как С# и java, или это только проблема с С++? Другими словами, rvalue references
делает С++ 11 еще более эффективным по сравнению с С# или Java?
Что касается С# (допустимая перегрузка оператора), скажем, у нас есть математический векторный класс, и мы используем его следующим образом.
vector_a = vector_b + vector_c;
Компилятор обязательно преобразует vector_b + vector_c
в некоторый временный объект (позволяет называть его vector_tmp
).
Теперь я не думаю, что С# может различать временное значение r, например vector_tmp
, или lvalue, например vector_b
, поэтому нам все равно придется копировать данные на vector_a
, чего легко избежать используя rvalue references
и move semantics
в С++ 11.