En primer lugar, cada vez que se puede eliminar una copia anteriormente, aún puede elase ahora, y los movimientos se pueden elidir en las mismas situaciones. Para el resto de esta publicación, asumiré que la elisión no ocurre por alguna razón (pretenden que el escritor del compilador fue flojo de mala manera).
En C++ 11 siempre se moverá una variable local devuelta std :: vector?
Cada vez que se cumplen los criterios para la elisión de copia, o la variable es explícitamente std::move
d.
¿Qué pasa si ese vector es miembro de una variable local en lugar de una variable local?
No se moverá a menos que explícitamente std::move
d.
Obviamente no se moverá una variable global. ¿Qué otros casos no se moverá?
Cada vez que no se cumplen los criterios para la elisión de copia y la variable no es explícitamente std::move
d.
Ninguno de estos es una razón válida para no devolver por valor. La devolución por valor está bien, porque incluso cuando el valor no se mueva automáticamente, puede forzarlo con std::move
.
Ver también [esta pregunta] (http://stackoverflow.com/q/9532608/500104). – Xeo