En C++ 03, no era legal para hacer lo siguiente
typedef int &ref;
ref &r = ...; // reference to reference!
Esto provoca con frecuencia problemas para las personas que compilan con muy estricta o más viejos Los compiladores de C++ 03 (GCC4.1 y Comeau 8/4/03 no les gusta lo anterior) porque los enlazadores de objetos de función estándar no se ocupan de la situación de "referencia a referencia" y ocasionalmente crean esos tipos ilegales.
En C++ 0x esto se llama "colapso de referencia", sí. La mayoría de los compiladores actuales de C++ 03 hacen eso (es decir, T&
donde T
denota un tipo de referencia es T
nuevamente), mediante la aplicación retroactiva de la regla. La biblioteca boost.call_traits hace que sea fácil declarar dichos parámetros de función, para que no ocurra la situación de "referencia a referencia".
Tenga en cuenta que el const
no tiene ningún efecto. Un const
aplicado en un tipo de referencia se ignora silenciosamente. Entonces, incluso si el compilador admite el colapso de referencia, lo siguiente no es legal
int const x = 0;
// illegal: trying to bind "int&" to "int const"!
ref const& r = x;
+1. Tengo algunos deberes para hacer en esto, thx –
Me gustaría vincular esta pregunta similar: http://stackoverflow.com/questions/4144234/c-template-instantiation-with-reference-type –