manejo - strcmp c++ para que sirve
¿Es legal mover el miembro.str() de una cadena de caracteres? (1)
std::ostream::str
hecho devuelve una copia de la cadena interna. Así que el movimiento es legal, pero no tiene sentido ya que result.str()
es un valor de todos modos y por lo tanto el std::move
no hace nada útil. En todo caso, dificulta el RVO, así que no lo hagas. (Como TartanLlama señaló correctamente en su comment , "No muevas el valor de retorno" se cumple en general, no solo cuando se devuelven valores).
En particular, std::move
no afecta al objeto de cadena interno de la secuencia.
Considere el siguiente ejemplo:
#include <sstream>
template <typename T>
inline std::string to_string(T const & op) {
std::ostringstream result;
result << op;
return result.str();
}
Si tuviera que devolver el resultado , en lugar de result.str () se convertiría automáticamente en un valor de r. No así la cadena contenida en el resultado (supongo). Mi expectativa es que se copie y la copia se devuelva como un valor de r.
Entonces mi pregunta aquí es si es legal:
return std::move(result.str());
Supongo que es así, esperando que la transmisión se quede con una cadena válida y vacía. Pero no me siento lo suficientemente seguro como para hacerlo realmente.