C++ 03 tuvo el problema de copias innecesarias que podrían ocurrir implícitamente. Para este propósito, C++ 11 introdujo rvalue references
y move semantics
. Ahora mi pregunta es, ¿este problema de copia innecesaria también existe en idiomas como C# y Java o fue solo un problema de C++? En otras palabras, ¿el rvalue references
hace que C++ 11 sea aún más eficiente en comparación con C# o Java?C++ Referencias de valores R y semánticas de movimiento
En lo que se refiere a C# (la sobrecarga del operador lo permite), digamos que tenemos una clase vectorial matemática, y la usamos así.
vector_a = vector_b + vector_c;
El compilador seguramente transformar vector_b + vector_c
a algún objeto temporal (le llaman vector_tmp
).
Ahora no creo que C# es capaz de diferenciar entre un rvalue temporal como vector_tmp
o un valor-I como vector_b
, por lo que tendremos que copiar datos a vector_a
de todos modos, que puede ser fácilmente evitado mediante el uso rvalue references
y move semantics
en C++ 11.
no utilice etiquetas de idioma que no están relacionados –