转载链接如下:

https://blog.csdn.net/u013298353/article/details/17676959

编译时

编译时顾名思义就是正在编译的时候.那啥叫编译呢?就是编译器帮你把源代码翻译成机器能识别的代码.(当然只是一般意义上这么说,实际上可能只是翻译成某个中间状态的语言.比如Java只有JVM识别的字节码,C#中只有CLR能识别的MSIL.另外还有啥链接器.汇编器.为了了便于理解我们可以统称为编译器)

那编译时就是简单的作一些翻译工作,比如检查老兄你有没有粗心写错啥关键字了啊.有啥词法分析,语法分析之类的过程.就像个老师检查学生的作文中有没有错别字和病句一样.如果发现啥错误编译器就告诉你.如果你用微软的VS的话,点下build.那就开始编译,如果下面有errors或者warning信息,那都是编译器检查出来的.所谓这时的错误就叫编译时错误,这个过程中做的啥类型检查也就叫编译时类型检查,或静态类型检查(所谓静态嘛就是没把真把代码放内存中运行起来,而只是把代码当作文本来扫描下).所以有时一些人说编译时还分配内存啥的肯定是错误的说法.

运行时

所谓运行时就是代码跑起来了.被装载到内存中去了.(你的代码保存在磁盘上没装入内存之前是个死家伙.只有跑到内存中才变成活的).而运行时类型检查就与前面讲的编译时类型检查(或者静态类型检查)不一样.不是简单的扫描代码.而是在内存中做些操作,做些判断.

举例说明

可能光讲概念你还是迷糊.还分别用C++和C#来举个简单点的例子.数组越界检查的例子(开发工具用的微软的VS)

C++中

int arr[] = {1,2,3};

int result = arr[4];

cout<<result<<endl;

上面的代码你一瞧你知道是错误的代码,数组越界了.但用编译器一编译,一点错都没.可见编译器其实还是挺笨的,还没你脑瓜子那么聪明啊.然后开始运行,Start Dubugging.于是报错了,于是你想虽然编译器笨了点,但运行起来时发现了错误也还不算太坏.但实际上运行时做数组的越界检查不是C++里面支持的特性,这里你dubug是VS中的一些工具给你做的检查.你如果点运行时选的是release而不是dubug的话会发现一切正常运行,但得到的结果不确定的.(因为你不知道arr[4]所指的内存里具有有啥数据.反正所以东东在内存中都是0101串嘛,你找到连续4个字节的一串0101来然后当成int数据处理.)我一运行得到个吓人的数字,数了下貌似是十亿多.要是银行计算我的账户中有多少钱时也这样来个数组越界,搞个十多亿那我可发了啊.哎显然是想多了,还是老实敲代码吧.

C#中

int[] arr = { 1, 2, 3 };

int result = arr[4];

Console.WriteLine(result);

一编译还是正常通过.但一运行就报错了啊.C#与C++中不同,它有与运行时类型检查.会检查数组是否越界不.如果越界了不会给你返回个错误的结果,而是直接报错.你如果没有异常处理语句处理的话整个软件就挂掉了啊.

为啥C++不在运行时做数组越界检查呢?

这应该主要是考虑到性能问题吧.C++设计之初为了达到与C差不多的效率.就尽量不会在运行时多做些额外的检查.因为这样无疑会降低性能的. 但有些地方却是必须得做运行时类型检查的.比如多态,你不在运行时做类型检查就没法搞定啊.举个简单例子吧.假如有父类Father,继承自Father的子类Son.这两个类中都有虚函数Fun.

Father fa;

Son so;

fa = so;

fa.Fun();   //在编译时,实际上是把Fun当作Father类中的Fun看待.

//但在运行时实际上这里的Fun是调用的Son中的函数Fun.所以不做运行时类型检查是没法确定的啊.

C++工作笔记-编译时类型检查与运行时类型检查相关推荐

  1. 2022Java学习笔记七十三(异常处理:运行时异常、编译时异常、异常的默认处理的流程)

    2022Java学习笔记七十三(异常处理:运行时异常.编译时异常.异常的默认处理的流程) 一.异常体系 1.Exception:java.lang包下,称为异常类,它表示程序本身可以处理的问题 2.R ...

  2. Java检查异常、非检查异常、运行时异常、非运行时异常的区别

    Java检查异常.非检查异常.运行时异常.非运行时异常的区别 参考文章: (1)Java检查异常.非检查异常.运行时异常.非运行时异常的区别 (2)https://www.cnblogs.com/ou ...

  3. 【C++】5.1 编译时的多态性与运行时的多态性

    5.1 编译时的多态性与运行时的多态性 1.什么时多态性 [定义] (1)在面向对象方法中,不同对象收到相同的消息时,产生不同的行为(即方法) (2)在C++程序设计中,多态性是指用一个名字定义不同的 ...

  4. java运行时异常的特点是什么_Java运行时异常和非运行时异常

    1.Java异常机制 Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类.Java中的异常分为两大类:错误Error和异常Exception,Java ...

  5. Java运行时异常和非运行时异常

    1.Java异常机制 Java把异常当做对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类.Java中的异常分为两大类:错误Error和异常Exception,Java ...

  6. 运行时异常和非运行时异常

    [强制]Java 类库中定义的可以通过预检查方式规避的RuntimeException异常不应该通过catch 的方式来处理,比如:NullPointerException,IndexOutOfBou ...

  7. Java基础——运行时异常和非运行时异常

    文章目录 Java中异常机制的体系结构 Error(错误) Exception(异常) 运行时异常和非运行时异常的区别 结束 Java中异常机制的体系结构 在Java中,万物皆对象,异常也不例外. E ...

  8. Java 运行时异常和非运行时异常

    异常类型分为两类:运行时异常和非运行时异常. 一.运行时异常: 运行时异常(RuntimeException),一般不需要程序员进行捕获. 例如:NullPointException,IndexOut ...

  9. Android RuntimePermissions运行时权限:单个运行时权限申请简例

    Android RuntimePermissions运行时权限:单个运行时权限申请简例 Android运行时权限申请的框架结构和步骤比较简单和固定,一般现状代码启动后检查当前的Android SDK版 ...

  10. 运行时异常与非运行时异常有什么区别?

    运行时异常与非运行时异常有什么区别? 运行时异常 RuntimeException 又称为非检查异常 uncheck exception.是 Exception 的子类. 在 Java 中,异常可以分 ...

最新文章

  1. python数字计算公式_Python中数字以及算数运算符的相关使用
  2. 从实习被劝退,到收获阿里腾讯的offer,谈谈读研给我带来的转变
  3. python3编译caffe错误:cannot find -lboost_python3
  4. Flex AdvancedDataGrid 数据展示异常
  5. [uEnv.txt]在uEnv.txt文件中使用if语句实现Image/dtb文件切换
  6. Math,random()返回区间内的随机数
  7. Intellij IDEA 使用学习
  8. 【渝粤教育】国家开放大学2018年春季 0176-22T电机学(一) 参考试题
  9. 前端学习(2981):Json格式转换
  10. javascript字符串相关的面试题总结
  11. (71)FPGA面试题-使用不同的代码实现2-4译码器?使用case语句
  12. while循环random结合_Java 经典算法:二分法查找(循环和递归两种方式实现)
  13. Daily Scrum02 12.03
  14. FastDFS-单机版安装
  15. 【转】惹恼程序员的十件事
  16. python真好玩 pdf 下载_Python真好玩:教孩子学编程_PDF电子书
  17. 简练网软考知识点整理-项目配置管理计划
  18. 2021年MEMS传感器产业链变化与趋势
  19. java font好看的字体_二十款漂亮的CSS字体样式
  20. Android 图片查看器选择器 PictureSelector

热门文章

  1. 如何批量查问PR值、百度权重、百度快照及收录量,用BlueCatTools批量网站查询工具
  2. 飞鸽传书有关举证不够严谨
  3. 来前端君朋友圈,一起聊前端面试技巧
  4. 第三节:ES6中另一个不得不说的关键字const
  5. badboy设置中文_[转载]Badboy使用教程
  6. android.support.v7.widget.,关于android.support.v7.widget.RecyclerView的使用,总是找不到类...
  7. matlab对多项式求导,matlab中多项式求导
  8. 机器学习笔记十一之降维
  9. 关注 | 新冠病毒这次的突变毒株太可怕,与人受体亲和力提高了1000倍,传播提高70%!已经成为伦敦地区主要毒株...
  10. R统计和作图文章汇总