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