LINUX.ORG.RU

g++ и typeid


0

0

Тестовая программка:

#include <iostream>
#include <typeinfo>

using namespace std;

int main()
{
int c;
char* s1;
char s2[10];
enum Lang {rus, eng, none};
Lang lan = rus;
cout << typeid(c).name() << endl;
cout << typeid(&c).name() << endl;
cout << typeid(s1).name() << endl;
cout << typeid(&s1).name() << endl;
cout << typeid(s2).name() << endl;
cout << typeid(&s2).name() << endl;
cout << typeid(lan).name() << endl;
cout << typeid(&lan).name() << endl;
return 0;
}

Компилим, запускаем, вывод:
i
Pi
Pc
PPc
A10_c
PA10_c
Z4mainE4Lang
PZ4mainE4Lang

Я думал, будет что-то типа int, char и т.д. Это фишка g++ или я что-то забыл? Как понять эти загадочные записи, особенно для enum'a? Где про это можно почитать?

p.s. пробовал на версиях 4.1.1 и 3.4.6.

> Как понять эти загадочные записи, особенно для enum'a? Где про это 
можно почитать?

Например, в стандарте на язык C++ ANSI ISO IEC 14882-2003 в разделе 
8.2 можно прочесть следующее:

-----------------------

 The named type is then the same as the type of the
hypothetical identifier. [Example:
       int                                         // int i
       int  *                                      // int *pi
       int  *[3]                                   // int *p[3]
       int  (*)[3]                                 // int (*p3i)[3]
       int  *()                                    // int *f()
       int  (*)(double)                            // int (*pf)(double)

name respectively the types "int," "pointer to int," "array of 3 pointers to int," "pointer to array of 3
int," "function of (no parameters) returning pointer to int," and "pointer to a function of (double)
returning int.'' ]
-------------------------

Соответственно, твои результаты можно интерпретировать как:
i      - int
Pi     - Pointer to int
Pc     - Pointer to char
PPc    - Pointer to Pointer to char
A10_c  - Array of 10 chars
PA10_c - Pointer to Array of 10 chars

Расшифровку для enum'ов я затрудняюсь дать. Лень перелопачивать весь
стандарт, может быть там имеется и полная расшифровка. Но общий смысл
такой, что имеются несколько самых базовых типов из которых,
комбинированием, в сущности все остальные и состоят. И typeid
возвращает эту последовательность комбинаций.

anonymous_incognito ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.