lvalue-to-rValue Conversion y comportamiento indefinido en int x = x;
en c, la cuestión de si asignar un valor no inicializado en sí mismo constituye un comportamiento indefinido ha sido un tema de debate. El estándar (3.3.2) declara que inicializar una variable consigo misma, como en el ejemplo int x = x;, puede conducir a resultados inesperados.
El quid del problema radica en el requisito potencial de conversión de lvalue a-valor en tales asignaciones. Supongamos que la mano derecha X es una variable automática no inicializada con un valor indeterminado. De acuerdo con el estándar (4.1), realiza una conversión de Lvalue a RValue en dicho valor da como resultado un comportamiento indefinido.
evidencia de Lvalue a-RValue Conversion
a pesar de la ausencia de los requisitos explícitos en el estándar, las diversas implicaciones sugieren que la intención primaria es construida en los operadores de construcción a los operadores integrados a construir en los operadores integrados a construir en los operadores integrados. Por ejemplo, las señales estándar de que los operadores de asignación incorporados implican la conversión de Lvalue a Rvalue para el operando correcto. Otras disposiciones también indican que la conversión de Lvalue-to-Rvalue se anticipa generalmente, excepto cuando se especifica explícitamente lo contrario.
que extiende la conjetura a los inicializadores
mientras la inicialización es distinta de la asignación, la ambigüedad estándar con respecto a las categorías de valor podría potencialmente extenderse a esta área. La evidencia sugiere que la especificación prevista es esperar prensalos donde sea necesario. Comportamiento.
Evidencias de apoyo
más evidencia surge de la consideración del código que asigna variables no inicializadas con diferentes tipos y diferentes tareas. El comportamiento inconsistente, como prevenir la conversión de Lvalue a-Rvalue en la inicialización de referencia, pero permitirlo en la inicialización de los objetos, agrega credibilidad a la opinión de que se espera que la conversión de Lvalue a-Rvalue para la Initialización de la copia. Conversión de Lvalue-to-Ralue. Esto sugiere la intención de establecer un comportamiento indefinido en casos como int x = x;. Esto, a su vez, conduce a un comportamiento indefinido debido a la naturaleza no inicializada de la mano derecha X. Las inconsistencias del estándar y la necesidad de aclaración resaltan la importancia de las especificaciones detalladas para las categorías de valor.
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