typeid().name() 返回值

它的输出是个字符指针,C++没有规定固定格式,我用的C-Free格式如下:

它的输出格式为 [指针][名称空间][类别][模板]

[指针]:若是指针则输出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。
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 C++ 中,`typeid(T).name()` 返回的是类型 `T` 的名称,是一个字符串。但是,这个字符串的格式是由编译器自行决定的,不同的编译器可能有不同的实现,因此不能依赖这个字符串来进行类型转换。如果需要进行类型转换,可以使用 `dynamic_cast` 或 `static_cast`。 `dynamic_cast` 可以将指向父类的指针或引用转换为指向子类的指针或引用,或者将指向虚基类的指针或引用转换为指向最终派生类的指针或引用。如果转换失败,则返回 `nullptr`。`dynamic_cast` 只能用于含有虚函数的类,因为它需要在运行时动态地检查类型信息。以下是一个示例代码: ```c++ class Base { public: virtual ~Base() {} }; class Derived : public Base { public: void func() {} }; int main() { Base* base = new Derived(); Derived* derived = dynamic_cast<Derived*>(base); if (derived) { derived->func(); } delete base; return 0; } ``` 在这个例子中,`Base` 是一个基类,`Derived` 是它的派生类。我们创建了一个 `Derived` 对象,并使用一个 `Base` 类型的指针指向它。然后,我们使用 `dynamic_cast` 将 `base` 指针转换为 `Derived` 指针,并调用 `func` 函数。由于 `dynamic_cast` 转换成功,所以可以安全地调用 `func` 函数。 `static_cast` 可以将一种类型的值转换为另一种类型的值,但是这种转换是在编译时进行的,不会检查类型信息。因此,如果类型转换不安全,就可能会导致运行时错误。以下是一个示例代码: ```c++ int main() { int a = 10; double b = static_cast<double>(a); std::cout << b << std::endl; return 0; } ``` 在这个例子中,我们使用 `static_cast` 将一个 `int` 类型的值转换为 `double` 类型的值,并将结果保存在 `b` 中。由于这种转换是安全的,因为 `int` 可以转换为 `double`,所以程序可以正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值