c++ - ¿Evitar los locales constantes que se devuelven?
c++14 move-semantics (1)
¿Es una buena idea tratar de evitar las
const
locales, o hay una mejor manera de lidiar con esto?
Sí. De hecho, si resource_ptr
es un tipo de solo movimiento , obtendrá un error en tiempo de compilación si intenta devolver uno que sea const
.
Este es un ejemplo de donde el consejo de C ++ 98/03 "probado y verdadero" ya no se aplica en C ++ 11 y adelante.
Siempre pensé que es bueno tener constantes locales ser const
void f() {
const resource_ptr p = get();
// ...
}
Sin embargo, la semana pasada observé a estudiantes que trabajaron en un ejercicio de C ++ y que se preguntaban si se devolvería un indicador de const.
resource_ptr f() {
const resource_ptr p = get();
// ...
return p;
}
Aquí, si el compilador no puede aplicar NRVO (imagine un escenario en el cual eso es cierto, quizás devolviendo uno de los dos punteros, dependiendo de una condición), de repente, la const
convierte en pesimismo porque el compilador no puede moverse de p
, porque es const.
¿Es una buena idea tratar de evitar las const
locales, o hay una mejor manera de lidiar con esto?