вывод typeinfo / typeid

В настоящее время я пытаюсь отладить кусок простого кода и хочу посмотреть, как конкретный тип переменной изменяется во время программы.

Я использую заголовочный файл typeinfo, чтобы я мог использовать typeid.name (). Я знаю, что typeid.name () зависит от компилятора, поэтому вывод может быть не особенно полезным или стандартным.

я используюGCC но я не могу найти список потенциальных выходных данных, несмотря на поиск, предполагая, что список выходных символов typeid существует. Я не хочу делать какие-либо преобразования на основе выходных данных или манипулировать какими-либо данными, просто следуйте их типу.

#include <iostream>
#include <typeinfo>

int main()
{ 
    int a = 10;
    cout << typeid(int).name() << endl;
}

Есть ли где-нибудь список символов?

 sellibitze07 окт. 2010 г., 18:16
Что ты пытаешься сделать? Что вы подразумеваете под списком символов точно?
 aLostMonkey07 окт. 2010 г., 18:10
Стоит отметить, что это GCC в комплекте с MinGW.
 AnT07 окт. 2010 г., 18:19
msgstr "изменения типа переменной ...". Э-э ... В C ++ типы переменных никогда не меняются. Переменная всегда имеет тип, с которым она была впервые объявлена.
 Donotalo07 окт. 2010 г., 18:10
если вы просто хотите следовать типам, то как насчетif (typeid(a) == typeid(int)) { /* action */ }?
 Mike Seymour07 окт. 2010 г., 18:25
 aLostMonkey07 окт. 2010 г., 18:55
Я проверяю, есть ли у чего-то остаток или нет. Я передавал оператору модуля двойной для его левого операнда, таким образом, ошибка. Код, который я наконец получил, использует вектор <T> :: size_type. Это определяется как двойной, но он работает, когда передается как операнд модуля. Вот почему я хочу проверить тип позже. Что касается символов, я имею в виду не слишком загадочные выходные буквы, которые GCC решает использовать.

Ответы на вопрос(1)

Решение Вопроса

существует ли такой список, но вы можете сделать небольшую программу для их распечатки:

#include <iostream>
#include <typeinfo>

#define PRINT_NAME(x) std::cout << #x << " - " << typeid(x).name() << '\n'

int main()
{
    PRINT_NAME(char);
    PRINT_NAME(signed char);
    PRINT_NAME(unsigned char);
    PRINT_NAME(short);
    PRINT_NAME(unsigned short);
    PRINT_NAME(int);
    PRINT_NAME(unsigned int);
    PRINT_NAME(long);
    PRINT_NAME(unsigned long);
    PRINT_NAME(float);
    PRINT_NAME(double);
    PRINT_NAME(long double);
    PRINT_NAME(char*);
    PRINT_NAME(const char*);
    //...
}
 v.oddou18 апр. 2013 г., 04:20
@Potatoswatter а как ты стренизируешь Т? ваше решение менее мощное, чем решение Бенса.
 Potatoswatter07 окт. 2010 г., 18:52
template< typename T > void PRINT_NAME() { std::cout << … }
 UniversE17 мая 2013 г., 09:42
 aLostMonkey07 окт. 2010 г., 18:26
большое спасибо, не слишком уверен, почему это не приходило мне в голову. Это работает отлично.

Ваш ответ на вопрос