C++ TypeId未按预期打印信息
可能重复:C++ TypeId未按预期打印信息,c++,typeid,C++,Typeid,可能重复: 我使用的是GCC,下面的代码输出了一些意想不到的东西 #include <iostream> #include <typeinfo> using namespace std; class B { public: B ( B * ptr) { cout<< typeid(*ptr).name()<<endl;} }; class D : public B { public: D() : B(this) { cout
我使用的是GCC,下面的代码输出了一些意想不到的东西
#include <iostream>
#include <typeinfo>
using namespace std;
class B {
public:
B ( B * ptr) { cout<< typeid(*ptr).name()<<endl;}
};
class D : public B {
public:
D() : B(this) { cout<<typeid(this).name()<<endl;}
};
int main()
{
D d;
return 0;
}
有人能给我解释一下为什么基类不能正确地判断派生类的类型吗?
非常感谢两个原因:
*ptr
)尚未完全构建*ptr
)尚未完全构建这取决于编译器。msvc为此提供了不同的typeid字符串。这取决于编译器。msvc为此提供了不同的typeid字符串。另请参见:另请参见:但typeid信息在编译时不是已知的吗?如果在编译时已知,则在运行时应打印派生类名。@lorex:
*ptr
的动态类型在编译时未知。它还没有完全建成,我现在明白了。很多感谢,但typeid信息在编译时不知道吗?如果在编译时已知,则在运行时应打印派生类名。@lorex:*ptr
的动态类型在编译时未知。它还没有完全建成,我现在明白了。非常感谢
1B
P1D