que he visto que several assertions C89 y C++ 03 definen reglas estrictas aliasing. Yo, sin embargo, no puedo encontrar ese bit en particular en el estándar. Según entendí, se agregaron estrictas reglas de aliasing en C99.¿C89 o C++ 03 definen reglas de alias estrictas?
Respuesta
El C++ 03 estándar tiene la siguiente bajo §3.10 [basic.lval] p15
:
Si un programa intenta acceder al valor almacenado de un objeto a través de un lvalue distinta de uno de los siguientes tipos el comportamiento es indefinido 48):
- el tipo dinámico del objeto,
- una versión cv calificado del tipo dinámico del objeto,
- un tipo que se la firmó o tipo sin signo correspondiente al tipo de dinámica del objeto ,
- un tipo que es el tipo firmado o sin firmar correspondiente a una versión cv-calificada del tipo dinámico del objeto,
- un agregado o tipo de unión que incluye uno de los tipos mencionados entre sus miembros (incluido, recursivamente, un miembro de una subagregado o unión contenida),
- un tipo que es un() tipo de clase base posiblemente cv calificado del tipo dinámico del objeto,
- un char o tipo unsigned char.
Nota al pie:
48) La intención de esta lista es especificar aquellas circunstancias en las que un objeto puede o no puede tener un alias.
This site también enumera las secciones en las otras normas.
Comprobando esto porque seleccioné explícitamente tu respuesta en la pregunta. –
Este texto está presente en C89, §3.3 expresiones:
Un objeto tendrá su almacenado valor visitada solamente por un lvalue que tiene uno de los siguientes tipos:
el tipo declarado del objeto,
una versión calificada del tipo de objeto declarado ,
un tipo que se la firmó o tipo sin signo correspondiente a la
tipo declarado del objeto,un tipo que se la firmó o tipo sin signo correspondiente a una versión calificada de la
tipo declarado del objeto,un tipo de agregado o unión que incluye uno de la mencionada
tipos entre sus miembros (incluyendo, de forma recursiva, un miembro de un subagregado
contenida o unión), oun tipo de carácter.
Violación de un "deberá" restricción conduce a un comportamiento no definido, por lo que un conjunto de reglas de solapamiento permitidas se puede derivar de este texto.
3,3 en C89, 3,10/15 en C++ 03.
Ambos tienen una nota al pie, palabras para el efecto de, "el propósito de esta lista es indicar cuándo un objeto puede o no tener un alias".
estupido ctrl-f! (¡Busqué la palabra "alias"! ¡Honesto!) –
- 1. Colocación nueva contra gcc 4.4.3 reglas de alias estrictas
- 2. C99 reglas estrictas de aliasing en C++ (GCC)
- 3. Habilitación de advertencias de alias estrictas en g ++
- 4. char * de conversión y las reglas de alias
- 5. Un molde que está rompiendo las reglas estrictas-aliasing
- 6. ¿Dónde se definen los alias predeterminados en PowerShell?
- 7. Motor de reglas en C o Python
- 8. directa perfecta en C++ 03
- 9. Colapso de referencia bajo C++ 03
- 10. ¿Accederá a un objeto de clase a través de un puntero a su clase derivada reglas de aliasing estrictas?
- 11. ¿Cómo puedo volver a escribir reglas con alias?
- 12. Alias o alias del nombre del paquete
- 13. Compatibilidad de biblioteca entre C++ 11 y C++ 03
- 14. "desreferencia puntero tipo punteado romperá reglas de alias estricto" advertencia
- 15. ¿C99 es compatible con C89?
- 16. Hacer plantillas django estrictas
- 17. ¿Qué versión de C es más apropiada para que los alumnos aprendan C89/90 o C99?
- 18. C89 C99 vs compilador GCC
- 19. C89, Mezcla declaraciones de variables y Código
- 20. ¿Utiliza propiedades o métodos para exponer reglas comerciales en C#?
- 21. ¿Cuál es la diferencia en el comportamiento indefinido entre C++ 03 y C++ 11?
- 22. ¿Debo usar alias o alias_method?
- 23. Arrays de longitud variable en C89?
- 24. ¿C++ 03 es una nueva versión del Estándar C++ o simplemente un Corrigendum Técnico (TC) de C++ 98?
- 25. alias de anidación en C#
- 26. Haskell: operaciones booleanas no estrictas
- 27. Diferencia entre default-initialize e value-initialize en C++ 03?
- 28. #if 0 como definen
- 29. Convertir el código C99 a C89
- 30. de cómo resolver la advertencia: puntero de tipo hizo juegos de palabras desreferenciar va a romper las reglas estrictas-aliasing
Cité la totalidad de C++ 03 3.10/15, que enumera las formas válidas de aliasing, [en una respuesta a otra pregunta] (http://stackoverflow.com/questions/4807643/container-covariances-in -c/4807726 # 4807726). –