class foo
{
public:
void say_type_name()
{
std::cout << typeid(this).name() << std::endl;
}
};
int main()
{
foo f;;
f.say_type_name();
}
上面的代码使用 g++ 在我的 ubuntu 机器上打印 P3foo。我不明白为什么它打印 P3foo 而不仅仅是 foo。如果我像
这样更改代码 std::cout << typeid(*this).name() << std::endl;
它打印 3foo。
有什么想法吗?
最佳答案
因为它是指向 foo 的指针。 foo 有 3 个字符。所以它变成了P3foo
。另一个是 foo
类型,所以它变成 3foo
。请注意,文本是依赖于实现的,在这种情况下,GCC 只是为您提供了内部的、错位的名称。
在程序 c++filt
中输入该损坏的名称以获得未损坏的名称:
$ c++filt -t P3foo
foo*
关于c++ - typeid() 在 g++ 中返回额外的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/789402/