ฉันสงสัยว่าอะไรคือความแตกต่างระหว่างtypeid
และtypeof
ใน C ++ นี่คือสิ่งที่ฉันรู้:
typeid
ถูกกล่าวถึงในเอกสารสำหรับ type_infoซึ่งถูกกำหนดไว้ใน C ++ ไฟล์ส่วนหัวtypeinfotypeof
ถูกกำหนดในส่วนขยาย GCC สำหรับ C และในไลบรารีC ++ Boost
นอกจากนี้ที่นี่คือการทดสอบการทดสอบรหัสที่ฉันได้สร้างที่ฉันได้ค้นพบ typeid
แล้วว่าไม่ได้คืนสิ่งที่ฉันคาดไว้ ทำไม?
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)
}
เอาท์พุท:
bash-3.2$ g++ -Wall main.cpp -o main
bash-3.2$ ./main
i
6Person
8Employee
P6Person
8Employee
name()
การดำเนินการที่กำหนดไว้ ไม่จำเป็นต้องเป็นชื่อตัวระบุ C ++ ที่ถูกต้องเพียงบางสิ่งที่ระบุประเภทเฉพาะ ดูเหมือนว่าการติดตั้งของคุณจะใช้รูปแบบการเขียนชื่อ mangling ทั่วไปของคอมไพเลอร์