Permitir la vinculación de referencias no constantes a Rvalue: una anomalía de VS2010
El estándar C prohíbe estrictamente vincular referencias no constantes a rvalues. Sin embargo, en una anomalía peculiar, Visual Studio 2010 (SP1) compila el siguiente código sin errores ni advertencias:
string foo() { return "hello"; }
int main() {
string& tem = foo(); // Non-const reference to rvalue
}
Discrepancias en el comportamiento del compilador
Por el contrario, otros compiladores exhiben un comportamiento más estricto:
Explicación de la anomalía de VS2010
Este comportamiento inusual en VS2010 se debe a una extensión del compilador conocida. A diferencia de GCC y Visual Studio 2008, VS2010 permite vincular referencias no constantes a rvalues en ciertos casos, como cuando el rvalue es generado por una función que devuelve un objeto temporal.
Si bien esta extensión desafía el estándar, probablemente se implementó por conveniencia. Sin embargo, puede conducir a un comportamiento indefinido si el rvalue se modifica después de vincular la referencia.
Consecuencias y recomendaciones
Esta extensión puede introducir errores sutiles en el código que depende sobre el adecuado cumplimiento de la norma C. Por lo tanto, se recomienda encarecidamente evitar vincular referencias no constantes a rvalues, incluso en VS2010. En su lugar, utilice siempre referencias constantes al vincular valores, como lo prevé el estándar.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3