Uso inusual de typedef en C++

2 minutos de lectura

Encontré un nuevo uso de la palabra clave definición de tipo en C++.

¿Qué significa esta declaración typedef?

int typedef foo;

  • Vaya, eso es nuevo. ¿Es eso portátil?

    – Ciego

    20 de septiembre de 2011 a las 19:36

  • Sí lo es. Lo he probado. Funciona como dice @Sven

    – vivek

    20 de septiembre de 2011 a las 19:38

  • Agregando esto a las cosas que no esperaba aprender hoy archivo

    – AJG85

    20 de septiembre de 2011 a las 20:16

  • Agregue esto a la lista de nunca hacer esto.

    – Martín York

    20 de septiembre de 2011 a las 22:34

  • posible duplicado de C++ crazy typedef: ¿cuál es el punto de permitir esta sintaxis por el Estándar?

    – Nawaz

    21 de septiembre de 2011 a las 13:06

avatar de usuario
Sven Marnach

es lo mismo que

typedef int foo;

es decir, define foo ser el tipo int. Mientras que la gramática permite intercambiar typedef y int en este caso, normalmente no haría esto porque perjudica la legibilidad.

  • Sí porque typedef es un decl-especificadorpuede ir antes o después del tipo, al igual que const. Nunca me di cuenta de eso antes.

    – Ben Voigt

    20 de septiembre de 2011 a las 19:39

  • #define ALSO_KNOWN_AS typedef /* ;-) */

    – Lambdageek

    20 de septiembre de 2011 a las 19:43

  • Vaya. Dios. ¿Es eso estrictamente C++ o en C99?

    – ZJR

    21 de septiembre de 2011 a las 0:02

  • @Lambdageek Eso es increíble (aunque nunca lo usaré, debido a la definecosa, y porque solo confundiría al lector… la declaración de función typedefs es lo suficientemente confusa…).

    – parcebal

    21 de septiembre de 2011 a las 8:00

avatar de usuario
jonathan grynspan

typedef es un especificador de declaración, por lo que tiene las mismas reglas de sintaxis que const o static. Se puede mover así y significará lo mismo.

  • No, typedef y especificador de clase de almacenamiento son ambos tipos de decl-especificadorpero typedef no es un especificador de clase de almacenamiento.

    – Ben Voigt

    20 de septiembre de 2011 a las 19:40


¿Ha sido útil esta solución?