小编典典

C ++中的'typeid'与'typeof'

all

我想知道CtypeidtypeofC 之间有什么区别。这是我所知道的:

另外,这里是我创建的测试代码测试,我发现它typeid没有返回我的预期。为什么?

主文件

#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

阅读 100

收藏
2022-07-27

共1个答案

小编典典

C 语言没有typeof. 您必须查看一些特定于编译器的扩展。如果您谈论的是 GCC typeof,那么 C11 中通过关键字
提供了类似的功能decltype。同样,C++ 没有这样的typeof关键字。

typeid是一个 C++
语言运算符,它在运行时返回类型标识信息。它基本上返回一个type_info对象,该对象与其他对象具有同等可比性type_info

注意,返回type_info对象的唯一定义属性是它是相等和不相等可比较的,即type_info描述不同类型的对象应该比较不相等,而type_info描述相同类型的对象必须比较相等。其他一切都是实现定义的。返回各种“名称”的方法不保证返回任何人类可读的内容,甚至不保证返回任何内容。

另请注意,上述内容可能暗示(尽管标准似乎没有明确提及)typeid相同类型的连续应用可能会返回不同的type_info对象(当然,它们仍然必须比较相等)。

2022-07-27