¿Qué significa "PKc", como la salida de typeid(var).name(),?

Me voy. PKc como la salida al proporcionar typeid(check).name() - donde check es un char variable - como el argumento typeid.name()

#include
using namespace std;
main()
{ 
    char check='e';
   cout<

Producto

c
PKc

Obtener incluso en cambiar el tipo de check desde char a double

#include
using namespace std;
main()
{ 
    double check=69.666;
   cout<

Producto

d
PKc

P.S. The solución sugerido por @Asteroids WithWings proporciona los escalones de los conceptos subyacentes pero no responde específicamente lo que significa "PKc".

Pregunta hecha hace 3 años, 4 meses, 26 días - Por codemasterx


4 Respuestas:

  • PKc es nombre mangled de const char*. P es la codificación para "puntero", K se refiere a "const", y c significa "char".

    Véase también ¿Por qué tipoid.name() devuelve caracteres raros usando GCC y cómo hacerlo imprimir nombres sin igual?.

    Respondida el Dec 19, 2020 a las 12:21 - por codechampionx

    Votos positivos: 0 | Votos negativos: 0

  • Esa cuerda es devuelta de un std::type_info::name() función llamada. El resultado de esa función es la aplicación específica, es decir, la norma C++ no requiere que todos los compiladores devuelvan alguna cadena específica. En cambio, cada compilador puede inventar su propia representación de cadenas de nombres de tipo C++. Los compiladores no son necesarios para que esa cadena sea fácilmente legible.

    Muy probable, "PKc" es la cadena que su compilador particular está utilizando para representar const char* tipo, que es el tipo de retorno std::type_info::name() función.

    Respondida el Dec 19, 2020 a las 12:26 - por codesculptor

    Votos positivos: 0 | Votos negativos: 0

  • En el contexto de la salida de typeid(var).name(), "PKc" significa lo siguiente:

    • "P" representa un "puntero" en el código fuente.
    • "K" representa una "constante".
    • "c" representa un "char"

    Por lo tanto, "PKc" hace referencia a un puntero constante a un tipo de dato de char.

    En cuanto a tu código, la salida de typeid(check).name() como "PKc" se debe al hecho de que typeid devuelve información sobre el tipo de dato de la variable check, que en este caso es un char. Al hacer typeid(typeid(check).name()).name(), estás obteniendo la información sobre el tipo de dato del resultado de typeid(check).name(), que también es un puntero constante a un tipo de dato char.

    Por otro lado, cuando cambias el tipo de check a double, la salida de typeid(check).name() ahora será "d" que representa el tipo de dato double. Pero la salida de typeid(typeid(check).name()).name() seguirá siendo "PKc" porque sigue siendo un puntero constante a un tipo de dato char, debido a que typeid(check).name() devuelve una cadena constante.

    Espero que esta explicación haya aclarado tu duda.

    Respondida el Dec 20, 2020 a las 12:24 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • PKc significa "Puntero a carácter constante".

    En C++, char es un tipo de dato primitivo que representa un solo carácter. Cuando se declara una variable char, se reserva un byte de memoria para almacenar el carácter.

    typeid(check).name() devuelve el nombre del tipo de la variable check. En este caso, check es un carácter, por lo que typeid(check).name() devolverá "c".

    typeid(typeid(check).name()).name() devuelve el nombre del tipo del tipo de la variable check. En este caso, el tipo de check es un carácter, por lo que typeid(check).name() devuelve "c". Por lo tanto, typeid(typeid(check).name()).name() devolverá "PKc", que es el nombre del tipo del puntero a carácter constante.

    Esto se debe a que typeid(check).name() devuelve un puntero a una cadena que contiene el nombre del tipo. El tipo de este puntero es const char*, que es un puntero a carácter constante.

    Por lo tanto, PKc significa "Puntero a carácter constante".

    Respondida el Dec 20, 2020 a las 12:31 - por Gemini

    Votos positivos: 0 | Votos negativos: 0