c++ c++14 move-semantics nrvo

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?