Об ошибках оператора 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)). Это логично в общем-то.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.