有关typeid().name()在dev-cpp下的输出解释

insulted 2009-05-27 02:30:38

#include <typeinfo>
#include <iostream>
using namespace std;
class X { public:virtual ~X(){}; };
class A { public:virtual ~A(){}; };
class B : public A {public:virtual ~B(){}; };
class C : public B {public:virtual ~C(){}; };
class D : public X, public C {public:virtual ~D(){}; };

int main()
{
A* pa = new D;
cout<< typeid( pa ).name() <<endl;

X* px = new D;
cout<< typeid( *px ).name() <<endl;
system("pause");
return 0;
}

以上代码在vc下输出为:
class A *
class D
比较形象直观!
但是在dev-cpp下编译运行输出却是:
P1A
1D
怎么不太明白直观呢?
P代表指针?1代表什么?A估计是类型了?
...全文
437 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
liubobob510 2011-09-04
  • 打赏
  • 举报
回复
顶9楼 学习了
aug_14_2002 2011-07-27
  • 打赏
  • 举报
回复
它的输出格式为 [指针][名称空间][类别][模板]

[指针]:若是指针则输出P。

[名称空间]:若是std则输出St,若是自定义的名称空间则输出字符数及它的名字,并在开头加N,在结尾加E。

[类别]:若是自定义的名称空间则输出字符数及它的名字,若内建类型输出如下:
  bool: b
  char: c
  signed char: a
  unsigned char: h
  (signed) short (int): s
  unsigned short (int): t
  (signed) (int): i
  unsigned (int): j
  (signed) long (int): l
  unsigned long (int): m
  (signed) long long (int): x
  unsigned long long (int): y
  float: f
  double: d
  long double: e

[模板] 类型模板以I开头,以E结尾;常数模板以L开头,以E结尾。只有整型变量(int、char之类的)才能做为常数模板,浮点数不行。

相信讲了这么多,楼主一定一头雾水。且让小弟举隅:
类型foo:输出3foo,因为foo有3个字符。
类型A*:输出P1A,因为A有1个字符,而此类型为A的指针。
类型std::complex<long double>:输出St7complexIeE。
类型test::really:输出N4test6reallyE。

较复杂的情形:
假设定义了以下的物件
template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
class Matrix
类型Eigen::Matrix<complex<float>, 3, 3, 0, 3, 3>:输出N5Eigen6MatrixISt7complexIfELi3ELi3ELi0ELi3ELi3EEE,注意int _Rows = 3是输出Li3E。
类型Eigen::Matrix<double, -1, -1, 0, -1, -1>:输出N5Eigen6MatrixIIdELin1ELin1ELi0ELin1ELin1EEE,其中负号是以n输出。
insulted 2009-06-14
  • 打赏
  • 举报
回复
再再顶!
Jalien 2009-06-10
  • 打赏
  • 举报
回复
本身实现就不一样。
insulted 2009-06-10
  • 打赏
  • 举报
回复
再顶!
insulted 2009-06-04
  • 打赏
  • 举报
回复
顶起来啊,不甘心就这样结贴!
  • 打赏
  • 举报
回复
自己多输出几个类型,就能总结出规律了
mengde007 2009-05-27
  • 打赏
  • 举报
回复
呵呵;要看编译器的设计者的意思了;
insulted 2009-05-27
  • 打赏
  • 举报
回复
就是想探求一下嘛!呵呵!
taodm 2009-05-27
  • 打赏
  • 举报
回复
没啥可解释的。C++标准没规定typeid.name()的输出格式。
你就别太试图理解天书了。
内容概要:本文系统研究了基于豪猪优化算法(CPO)的多无人机协同集群在三维空间中的避障路径规划问题,聚焦于实现以最低成本为目标的航迹优化,综合考虑路径长度、飞行高度、威胁规避及转弯角度等多个关键因素。通过构建精细化的三维环境模型与多无人机协同机制,采用Matlab平台实现CPO算法的仿真与验证,充分展示了该算法在复杂动态障碍环境下的高效搜索能力与全局优化性能。研究不仅涵盖了路径规划的数学建模与目标函数设计,还深入探讨了算法的收敛特性与鲁棒性,为智能群体系统在实际场景中的应用提供了理论依据与技术支撑。; 适合人群:具备一定编程基础和优化算法背景,从事无人机系统控制、智能路径规划、群体协同、人工智能与自动化等相关领域的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于多无人机协同执行侦察、灾害监测、应急救援、区域巡检等复杂任务中的自主路径规划;②为智能优化算法在三维动态环境下的路径决策问题提供可复现的技术范例;③支持研究人员对CPO算法与其他主流群智能算法(如PSO、GWO、WOA等)进行性能对比与改进研究,推动路径规划技术的发展。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点理解目标函数的多维度建模方式与CPO算法的迭代优化流程,可通过调整环境参数与约束条件进行仿真实验,对比不同算法在相同场景下的路径质量与收敛速度,从而深入掌握其优势与适用边界。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧