zoukankan      html  css  js  c++  java
  • [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() << "
    ";
        cout << "param = " << typeid(param).name() << "
    ";
    }
    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++类型的推断的规则还是最本质的
  • 相关阅读:
    fiddler查看IP地址和请求响应时间
    web安全测试排查
    搞站思路 <陆续完善中>
    sys模块进度条玩法笔记
    Webbench、ab命令:做压力测试的工具和性能的监控工具
    xlwings excel(三)
    xlwings excel(二)
    xlwings excel(一)
    xlwings API Documentation
    Python+Excel 操作对比
  • 原文地址:https://www.cnblogs.com/Azurewing/p/4731226.html
Copyright © 2011-2022 走看看