Ich frage mich, was der Unterschied zwischen typeid
und typeof
in C++ ist. Hier ist, was ich weiß:'typeid' versus 'typeof' in C++
typeid
ist in der Dokumentation für type_info genannt, die in der C++ Header-Datei definiert ist typeinfo.typeof
ist in der GCC-Erweiterung für C und in der C++ Boost-Bibliothek definiert.
Auch hier ist Testcode Test, die ich angelegt habe, wo ich entdeckt habe, dass typeid
nicht zurück, was ich erwartet hatte. Warum?
main.cpp
#include <iostream>
#include <typeinfo> //for 'typeid' to work
class Person {
public:
// ... Person members ...
virtual ~Person() {}
};
class Employee : public Person {
// ... Employee members ...
};
int main() {
Person person;
Employee employee;
Person *ptr = &employee;
int t = 3;
std::cout << typeid(t).name() << std::endl;
std::cout << typeid(person).name() << std::endl; // Person (statically known at compile-time)
std::cout << typeid(employee).name() << std::endl; // Employee (statically known at compile-time)
std::cout << typeid(ptr).name() << std::endl; // Person * (statically known at compile-time)
std::cout << typeid(*ptr).name() << std::endl; // Employee (looked up dynamically at run-time
// because it is the dereference of a pointer
// to a polymorphic class)
}
output:
bash-3.2$ g++ -Wall main.cpp -o main
bash-3.2$ ./main
i
6Person
8Employee
P6Person
8Employee
In welcher Art und Weise denken Sie Ihren Code druckt nicht die richtigen Namen? Es sieht gut aus für mich. Die tatsächliche von 'name()' zurückgegebene Zeichenfolge ist implementierungsdefiniert. Es muss kein gültiger C++ - Bezeichnername sein, nur * etwas *, das den Typ eindeutig identifiziert. Es sieht so aus, als ob Ihre Implementierung das allgemeine Namens-Mangling-Schema des Compilers verwendet. –
Danke Rob! Ich habe genau die gleichen erwartet wie Typnamen, wie ich es in en.wikipedia.org/wiki/Typeid gesehen habe. Was kann die Namensgebung hier tun? – Tim