Posts

Showing posts from September, 2022

[ES] Sobre "perfect forwarding" en C++

Un amigo tenía algunas dudas sobre perfect forwarding en C++, y terminé escribiendo esta explicación. value categories Antes de hablar sobre los detalles de la deduccion de tipos en C++ es fundamental mencionar las value categories. En C++ hay dos tipos de referencias. Referencias a lvalues y referencias a rvalues. Llamemoslas L-refs y R-refs, respectivamente. Normalmente, las L-refs apuntan a objetos que tienen una ubicación fija en memoria, mientras que las R-refs apuntan a objetos temporales. Normalmente, una L-ref se denota T& y una R-ref se denota T&& , donde T es un tipo concreto. Por convención, si recibís una R-ref, tenes derecho a romper el objeto al que apunta. En caso contrario, no. std::move toma una L-ref y la castea a R-ref. template argument deduction Digamos que tenemos una funcion monki , que tiene un template parameter T . Y digamos que T aparece dentro del tipo de uno de los parametros de monki . Por ejemplo: template<typename T>