Tôi tự hỏi sự khác biệt giữa typeid
và typeof
trong C ++. Đây là những gì tôi biết:
typeid
được đề cập trong tài liệu về type_info , được định nghĩa trong tập tin typeinfo C ++ .typeof
được định nghĩa trong phần mở rộng GCC cho C và trong thư viện C ++ Boost .
Ngoài ra, đây là bài kiểm tra mã kiểm tra mà tôi đã tạo ở nơi tôi phát hiện ra typeid
không trả lại những gì tôi mong đợi. Tại sao?
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)
}
đầu ra:
bash-3.2$ g++ -Wall main.cpp -o main
bash-3.2$ ./main
i
6Person
8Employee
P6Person
8Employee
name()
được xác định thực hiện. Nó không phải là một tên định danh C ++ hợp lệ, chỉ là một cái gì đó xác định duy nhất loại. Có vẻ như việc triển khai của bạn sử dụng lược đồ xáo trộn tên chung của trình biên dịch.