Estoy tratando de entender si hay algún beneficio para devolver una referencia const
. Tengo una función factorial que normalmente se ve así:C++ Pase por Const Referencia y devolución por Const Referencia
unsigned long factorial(unsigned long n)
{
return (n == 0) ? 1 : n * factorial(n - 1);
}
Estoy asumiendo que habrá un aumento de rendimiento cuando se pasa por referencia const
y devolver una referencia const
... pero const
-correctness siempre me confunde.
const unsigned long & factorial(const unsigned long& n)
{
return (n == 0) ? 1 : n * factorial(n - 1);
}
¿Es válido para devolver una referencia const
? Además, podría alguien decirme por favor: ¿es beneficioso?
¿Qué sucede cuando el valor de retorno se sale del alcance (es decir, al final de la función)? Supongo que la referencia apunta a la memoria no válida. – robinjam
Es poco probable que pasar 'largo' por referencia directa sea beneficioso para pasarlo por valor. En general, esto es específico de la implementación, pero en todas las arquitecturas en las que pueda pensar, tanto 'long' como' long & 'se representarán como cantidades de 32 bits, o ambas serán de 64 bits. Entonces copia la misma cantidad de datos, pero ahora la persona que llama tiene que calcular la dirección (lo que significa que también debe tener un local, y no solo quedarse en el registro), y el destinatario tiene que eliminar la referencia. En el mejor de los casos, la función se insertaría y el optimizador descartaría la referencia. –
Así que estoy seguro si solo hago que los parámetros de retorno y de entrada sean const (sin referencias, solo const values). – Kiril