Об ошибках оператора typeid, или моих ошибках...
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Всем «здравствуйте». Недавно(только что) прочитал в книге Герберта Шилдта «Полный справочник по программированию c++» про оператор
typeid
. Естественно, захотелось протестировать этот замечательный оператор. Пишу программу:#include <iostream> #include <typeinfo> using namespace std; class myclass { }; int main () { int int_ = 5; myclass ob; cout << typeid(int_).name() << endl; cout << typeid(ob).name() << endl; return 0; }
Вместо(как заявлено в книге)
int class myclass
программа выводит:
i 7myclass
не могу понять, в чём проблема. Может вы знаете?
P.S.: компилятор devcpp 5.4.2
Специально для тех, кто может столкнётся с такой проблемой: ( компилятор GCC, данное явление наблюдалось также в Code Blocks ) оказывается,
typeid
является компиляторозависимым оператором, в стандарте C++ не прописано, как он должен работать, поэтому некоторые компиляторы «лукавят». Придётся выкручиваться как то так(если, например, кому-то надо узнать, является ли объект типомint
) :if ( typeid(someObject) == typeid(int) ) { cout << "Объект типа int" << endl; }
P.S.: я понимаю, что говорю очевидные вещи, но всё же вдруг кому-то понадобится. Если знаете способ решения данной проблемы, или более разумную реализацию, скажите, мне самому интересно).
Если значение
std::type_info::name
зависит от реализации компилятора, то нужно не завязываться на константах, а делать так —if (typeid(someObject) == typeid(int))
. Это логично в общем-то.А вообще, применение
typeid
может быть оправдано только при использовании динамической идентификации типов.