欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > C++中的typeid使用方法

C++中的typeid使用方法

2024/10/25 16:17:51 来源:https://blog.csdn.net/haipengzhou/article/details/142559660  浏览:    关键词:C++中的typeid使用方法
class base
{
public:virtual ~base(){}
};class derived : public base
{
public:virtual ~derived(){}
};

上边代码说明了derived和base之间的关系

int a = 1;
string s = "hello world";
int& b = a;
int&& c = 10;
int* pa = &a;cout << typeid(a).name() << endl;
//输出intcout << typeid(b).name() << endl;
//输出intcout << typeid(c).name() << endl;
//输出intcout << typeid(pa).name() << endl;
//输出int * __ptr64cout << typeid(s).name() << endl;
//输出class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >

由上述代码可知,typeid().name()可以识别出变量类型,但是对于左值引用和右值引用都是直接输出的其母体的数据类型

除此之外,typeid().name()还可以输出自定义的变量类型

base father;
cout << typeid(father).name() << endl;
//输出class base

但要注意的是:

derived child;
base& cf = child;
cout << typeid(cf).name() << endl;
//输出class derived

在实现了多态后, typeid(父类引用(引用的是子类对象)).name() 输出的是该父类引用指向的子类对象的类型名

typeid().name()的返回值char const* __ptr64

cout << typeid(typeid(child).name()).name() << endl;
//输出char const * __ptr64

因此可以通过其来判断两个对象的类型是否相等

if (typeid(child).name() == typeid(cf).name())
{cout << 1 << endl;
}
//输出1

类模版也同样适用!

template<class T>
struct base
{virtual ~base(){}
};template<class T>
struct derived : public base<T>
{virtual ~derived(){}
};int main()
{base<int> father;derived<int> child;base<int>& cf = child;cout << typeid(father).name() << endl;//输出struct base<int>cout << typeid(cf).name() << endl;//输出struct derived<int>return 0;
}

总结:typeid().name()可以返回对应变量的类型,()里边可以是类型名,也可以是变量名。除此之外,还可以用其来判断两个对象类型是否相等(对模板也生效)。
注:typeid().name()中的参数如果是引用了子类对象的父类引用,那么其返回的是对应子类的类型(但是必须要实现多态)。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com