我想知道 C++ 中的 typeid
和 typeof
有什么区别。以下是我所知道的:
另外,这是我创建的测试代码测试,我发现 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
最佳答案
C++ 语言没有 typeof
这样的东西。您必须查看一些特定于编译器的扩展。如果您谈论的是 GCC 的 typeof
,那么 C++11 中通过关键字 decltype
提供了类似的功能。同样,C++ 没有这样的 typeof
关键字。
typeid
是一个 C++ 语言运算符,它在运行时返回类型标识信息。它基本上返回一个 type_info
对象,该对象可与其他 type_info
对象进行相等比较。
注意,返回的 type_info
对象的唯一定义属性是它是相等和不相等可比较的,即描述不同类型的 type_info
对象应该比较不相等,而描述相同类型的 type_info
对象必须比较相等。其他一切都是实现定义的。返回各种“名称”的方法不保证返回任何人类可读的内容,甚至根本不保证返回任何内容。
还要注意,以上可能暗示(尽管标准似乎没有明确提及)typeid
对同一类型的连续应用可能会返回不同的 type_info
对象(当然,它们仍然必须比较相等)。
关于c++ - 'typeid' 与 C++ 中的 'typeof',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1986418/