const und typeid



  • Was sollte dieses Programm hier ausgeben, wenn es mit einem standardkonformen Compiler compiliert wird?

    class MyClass
    {
        public:
        //...
        MyClass() {}
        virtual ~MyClass() {}
    };
    
    int main()
    {
        cout << (typeid(int) == typeid(const int)) << endl;
        cout << (typeid(MyClass) == typeid(const MyClass)) << endl;
    }
    

    Wird const von typeid beachtet oder nicht?

    [ Dieser Beitrag wurde am 03.04.2003 um 16:05 Uhr von Steven editiert. ]



  • das Programm gibt gar nix aus.... weil 2 Klammern fehlen *g*



  • Ooops! Jetzt sind sie da... 🙄



  • Zitat aus einer SUN C++ Manpage (ich weiß allerdings nun nicht, ob das im Standard auch so steht):

    typeid Operator
    The typeid operator produces a reference to an object of class type_info, which describes the most-derived type of the object. In order to make use of the typeid() function, source code must #include the <typeinfo.h> header file. The primary value of this operator/class combination is in comparisons. In such comparisons, the top-level const-volatile qualifiers are ignored, as in the following example.

    #include <typeinfo.h>

    #include <assert.h>

    void use_of_typeinfo( )

    {

    A a1;

    const A a2;

    assert( typeid(a1) == typeid(a2) );

    assert( typeid(A) == typeid(const A) );

    assert( typeid(A) == typeid(a2) );

    assert( typeid(A) == typeid(const A&) );

    B b1;

    assert( typeid(a1) != typeid(b1) );

    assert( typeid(A) != typeid(B) );

    }



  • @CodeWalker: Danke!
    Mein gcc macht keinen Unterschied zwischen const und nicht-const Objekten. Aber ist das bei allen Compilern so?



  • Hallo,
    die Norm sagt im Paragraph 5 des Abschnitts 5.2.8 Type identification :

    the top-level cv-qualifiers of the lvalue expression or the type-id that is the operand of typeid are always ignored.

    Damit ist z.B.

    class Foo {...};
    Foo f;
    const Foo cf;
    assert(typeid(f) == typeid(cf));
    

    durch die Norm garantiert.

    [ Dieser Beitrag wurde am 03.04.2003 um 17:58 Uhr von HumeSikkins editiert. ]


Anmelden zum Antworten