Effective Modern C++: Item 4 -> 知道如何查看推断类型
来源:互联网 发布:java年度工作总结 编辑:程序博客网 时间:2024/05/21 15:01
知道如何查看推断类型
查看推断类型的工具选择其实决定于你想在软件开发的什么阶段看到这些信息。我们将探索三种可能:在你编辑代码的时候查看,编译的时候查看以及运行的时候查看
集成开发环境(IDE)编辑器
在IDE里面的代码编辑器里,当你将鼠标光标停留在program入口处(比如说变量名,参数或者函数等),一般来说会显示出入口处的类型。例如,考虑下面的代码:
const int theAnswer = 42;auto x= theAnswer;auto y = &theAnswer;
一个IDE的编辑器应该会显示x的推断类型是int而y的推断类型是const int*。
为了让这个可以work,你的代码必须处于或多或少可编译的状态,因为IDE实现这个的途径就是给运行在其内部的C++编译器(或者至少编译器前端)提供这类信息。如果一个编译器不能从你的代码中得到足够的信息去处理它并进行类型推断,那么它将不能显示出推断类型。
对于简单类型如int,来自于IDE的信息基本上是足够的,但是我们后面会看到,对于更加复杂的类型,IDE显示的信息却不一定有什么帮助。
编译器诊断
一种使得编译器显示出它推断出来的类型的有效方法就是使用该类型,然后写出一段编译报错的代码。关于该问题的错误信息一般会显示出导致该问题的类型。
假设,我们想看上面例子中给x和y推断出来的类型。我们首先声明一个我们不会定义的类模板,就像这样的:
template<typename T> //declaration only for TDclass TD; // TD = "Type Display"
任何尝试实例化该模板的操作都报告错误信息,因为没有模板定义可以实例。为了看x和y的类型,就尝试用他们的类型来实例化TD:
TD<decltype(x)> xType;//elicit errors containing x's and y's typesTD<decltype(y)> yType;
我按照variableNameType这种形式给变量命名,因为这样可以帮助我找到我需要寻找的变量的错误信息。对于上面的代码,我的一个编译器提示如下诊断信息:
error:aggregate 'TD<int> xType' has incomplete type and cannot be definederror:aggregate 'TD<const int *> yType' has incomplete type and cannot be defined
另一个不同的编译器提供了如下诊断信息,格式有点不一样:
error:'xType' uses undefined class 'TD<int>'error:'yType' uses undefined class 'TD<const int *>'
抛开输出格式,我测试过的所有编译器都产生了带类型信息的错误消息。
运行时输出
这个可以自己看啦~
我后面再把这部分翻译出来。。
要点记忆
- 推断类型一般可以通过使用IDE的编辑器,编译器错误信息以及Boost TypeIndex库来看
- 一些工具的结果可能既没有用也不准确,所以对于C++的类型推断的理解是至关重要的
- Effective Modern C++: Item 4 -> 知道如何查看推断类型
- Effective Modern C++:Item 2 ->弄清auto类型推断
- Effective Modern C++ 条款4 懂得如何查看已推断类型
- Effective Modern C++ :Item 1 -> 理解模板类型推断
- [effective modern c++][1]理解模板类型推断
- [effective modern c++][2]理解auto类型推断
- 《Effective Modern C++》翻译--条款4:了解如何查看推导出的类型
- Effective Modern C++ : Item 6 -> 当auto推断出不想要的类型时,使用显式类型初始化语法
- [effective modern c++][5]与其使用显示类型推断不如使用auto
- Effective Modern C++ Item 4
- Effective Modern C++ 条款1 理解模板类型推断
- Effective Modern C++ 条款2 理解auto类型推断
- Effective Modern C++ 笔记(一)——类型推断
- 《Effective Modern C++》Item 1总结
- 《Effective Modern C++》Item 2总结
- Effective Modern C++》Item 3总结
- Effective Modern C++: Item 3 ->弄清decltype
- Effective Modern C++: Item 5 -> 优先选择auto而不是显式类型声明
- ASP.NET MVC4在部署IIS后,运行时显示的是整个Web的目录列表
- grails项目中的java类中调用service方法
- 搜索框(历史记录)cookie
- 矩阵归零
- android dialog 的超简单使用
- Effective Modern C++: Item 4 -> 知道如何查看推断类型
- 对象作用域
- pytorch-cycleGAN网络文件的理解
- Session过期,如何跳出iframe框架页的问题
- 安卓实现listview联动效果且选项多选
- centos7 k8s1.5.2(kubernetes) etcd flannel dns dashboard nginx tomcat slb haproxy keepalived
- 【教程】如何在C#中创建PDF417条码
- 征信再好也没用,这8类房子申请借款会被拒!
- 简单的asynctask