"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué Visual Studio 2010 permite el enlace de referencia no constante a valores R?

¿Por qué Visual Studio 2010 permite el enlace de referencia no constante a valores R?

Publicado el 2024-11-04
Navegar:470

Why Does Visual Studio 2010 Allow Non-Const Reference Binding to Rvalues?

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:

  • GCC emite un error de compilación, identificando correctamente lo ilegal vinculación de una referencia no constante a un rvalue.
  • Visual Studio 2008 proporciona una advertencia de compilación, reconociendo el problema potencial pero permitiendo que la compilación continúe.

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.

Último tutorial Más>

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