[Effective Modern C++] Item 4. Know how to view deduced types - 知道如何看待推断出的类型

条款四 知道如何看待推断出的类型

基础知识

有三种方式可以知道类型推断的结果:

  • IDE编辑器
  • 编译器诊断
  • 运行时输出

使用typeid()以及std::type_info::name可以获取变量的类型信息,但是存在一些问题,代码如下:

template<typename T>
void f(const T& param) {
    using std::cout;
    cout << "T = " << typeid(T).name() << "\n";
    cout << "param = " << typeid(param).name() << "\n";
}
std::vector<Widget> createVec();
const auto vw = createVec();
if(!vw.empty()) {
    f(&vw[0]);
} // T -> class Widget const*, param -> class Widget const*

std::type_info::name要求类型以值的方式被传递。

正确结果T为Widget const*,param为Widget const* const&,分析如下:

  ??vw的类型为const vector<Widget>,则&v[0]被推断为const Widget*类型,当传入f中时,传入的是指针的引用,即const Widget const*,所以T的...

可以使用boost的type_id_with_cvr获得正确的类型。

总结

  • 推断类型总可以通过IDE编辑器,编译器错误信息和Boost TypeIndex库获知
  • 一些工具的结果可能既不有用又不准确,所以了解C++类型的推断的规则还是最本质的

 

转载于:https://www.cnblogs.com/Azurewing/p/4731226.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值