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. ]