C LanguageLiterales compuestos


Sintaxis

  • (tipo) {lista de inicializadores}

Observaciones

La norma C dice en C11-§6.5.2.5 / 3:

Una expresión de posfijo que consiste en un nombre de tipo entre paréntesis seguido de una lista de inicializadores de corchetes es un literal compuesto . Proporciona un objeto sin nombre cuyo valor viene dado por la lista de inicializadores. 99)

y la nota de pie de página 99 dice:

Tenga en cuenta que esto difiere de una expresión de reparto. Por ejemplo, una conversión de caracteres especifica una conversión a tipos escalares o solo anulados , y el resultado de una expresión de conversión no es un valor de l.

Tenga en cuenta que:

Los literales de cadena, y los literales compuestos con tipos const-calificados, no necesitan designar objetos distintos. 101)

101) Esto permite que las implementaciones compartan almacenamiento para literales de cadena y literales compuestos constantes con representaciones iguales o superpuestas.

El ejemplo se da en el estándar:
C11-§6.5.2.5 / 13:

Al igual que los literales de cadena, los literales compuestos con calificación constante se pueden colocar en la memoria de solo lectura e incluso se pueden compartir. Por ejemplo,

(const char []){"abc"} == "abc"

podría dar 1 si el almacenamiento de los literales es compartido.

Literales compuestos Ejemplos relacionados