Об ошибках оператора typeid, или моих ошибках...
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
Всем «здравствуйте». Недавно(только что) прочитал в книге Герберта Шилдта «Полный справочник по программированию c++» про оператор
typeid
. Естественно, захотелось протестировать этот замечательный оператор. Пишу программу:Вместо(как заявлено в книге)
программа выводит:
не могу понять, в чём проблема. Может вы знаете?
P.S.: компилятор devcpp 5.4.2
Специально для тех, кто может столкнётся с такой проблемой: ( компилятор GCC, данное явление наблюдалось также в Code Blocks ) оказывается,
typeid
является компиляторозависимым оператором, в стандарте C++ не прописано, как он должен работать, поэтому некоторые компиляторы «лукавят». Придётся выкручиваться как то так(если, например, кому-то надо узнать, является ли объект типомint
) :P.S.: я понимаю, что говорю очевидные вещи, но всё же вдруг кому-то понадобится. Если знаете способ решения данной проблемы, или более разумную реализацию, скажите, мне самому интересно).
Если значение
std::type_info::name
зависит от реализации компилятора, то нужно не завязываться на константах, а делать так —if (typeid(someObject) == typeid(int))
. Это логично в общем-то.А вообще, применение
typeid
может быть оправдано только при использовании динамической идентификации типов.