C与C++的关系:

C++在C语言的基础上进行的升级最重要的是两个方面:

  1、类型的加强,C++更称得上是高级语言,C++语言对于类型的检查更严格

  2、面向对象的支持,天生支持面向对象软件开发方法学

C++语言是C语言的进化。

C++语言更强调语言的实用性,有一些语法方面的加强

  所有变量都可以在需要使用时再定义

而C语言中的变量必须在作用域开始的位置定义(老的C语言版本)

register关键字:

  register关键字在C语言中很鸡肋,编译器发展到后期,优化能力很强。C++虽然依旧支持register,这仅仅是为了兼容C语言。C++有自己的优化方式,基本不看是否存在regster关键字。register在C++中形同虚设。

  C++中的register关键字:

  

在C语言中,重复定义多个同名的全局变量是合法的

在C++中,不允许定义多个同名的全局变量,C++直接拒绝这种二义性的做法

C语言中的多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上

示例程序:

上述的程序变量c不是在main函数的起始作用域处定义的,for循环中也定义了i,这在C语言是不合法的,会报错。int型的register变量a,在C++中register会被编译器忽略。

C++如果定义两个相同的全局变量会直接报错:

用gcc编译器编译会得到如下错误:

struct关键字的加强:

  C语言中的struct定义了一组变量的集合

  C语言中的struct定义的标识符并不是一种新的类型

  C++中的struct用于定义一个全新的类型

  C++中进行了类型的加强,非常注重类型,C++中把struct关键字当成是一个定义新类型的关键字,只要struct出现了,C++就认为产生了一种全新的类型。C语言中定义新类型必须要用typedef。

  上面的等价定义中,左边的在C语言中,编译器认为struct定义了一种变量的集合,并且这个变量的集合有一个名字叫做_tag_student,它并不是一种新的类型,如果要将它当做类型来使用,必须要用typedef关键字来定义一个类型名。而在右边的定义中,C++编译器认为struct定义了一种Student新类型。

标识符:C语言中的默认类型是int,函数在定义时如果没有给出参数或者返回值,则默认为int,也就是上图中i默认为int,f的返回值也默认为int。g的返回值也默认为int,g默认接受任意参数。

  这种默认类型在当代的软件开发中是绝对不允许支持的,因为会引入二义性。因此,C++对这种默认类型进行了升级,使得int f() 和 int f(void)具有相同的意义。并且int f(void)这种写法是为了兼容C语言。

  考虑如下的示例程序:

用C++编译器会报如下的错误:

用C语言编译器会报和上面不同的错误:

面试中的问题:

对于C++编译器来说它们没有区别,对于C语言编译器,它们是有区别的。

小结:

  C++更强调实用性,可以在任意地方声明变量。体现在变量的声明地点和struct关键字。

  C++中的register只是一个兼容的作用

  C++编译器能够更好的进行优化

  C++中的任意标识符都必须显式的指明类型,不允许默认类型。

C++中将C语言中一些有二义性的语法删除了。

第2课 C到C++的升级的更多相关文章

  1. 第2课 C 到 C++ 的升级

    1.  C与C++的关系 (1)C++继承了所有的C特性,并在C的基础上提供了更多的语法和特性. (2)C++的设计目标是运行效率与开发效率的统一,它更强调的是语言的实用性. 2. C到C++ 的升级 ...

  2. 天草(初级+中级+高级)VIP和黑鹰VIP破解教程(全部iso下载地址)

    以下就是我收集的教程地址,之前我收集到的都是一课一课下载的,虽然这样,我也下载完了天草的全部课程.这里分享的是在一起的iso文件,比起一课课下载爽多了.~~ 还有这些教程都是从零起点开始教的,不用担心 ...

  3. 大叔力量VIP介绍

    VIP介绍 框架技术点 平台 仓储 日志收集 缓存 消息队列 服务总线 事务 任务调度 授权 模块化 服务发现 .net ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✔ - .net core ✔ ✔ ✔ ✔ ✔ ...

  4. 微服务SpringCloud+Docker入门到高级实战(教程详情)

    第一章 课程介绍和学习路线 1.微服务架构SpringCloud课程介绍 简介:课程介绍和课程大纲讲解,讲课风格和重点内容理解技巧 2.技术选型和学后水平 简介:课程所需基础和技术选型讲解,学完课程可 ...

  5. 微服务SpringCloud+Docker入门到高级实战(目录)

    第一章 课程介绍和学习路线 1.微服务架构SpringCloud课程介绍 简介:课程介绍和课程大纲讲解,讲课风格和重点内容理解技巧2.技术选型和学后水平 简介:课程所需基础和技术选型讲解,学完课程可以 ...

  6. 小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介

    笔记 ============================================= SpringCloud课程笔记.txt 第一章 课程介绍和学习路线 1.微服务架构SpringClou ...

  7. 《C++深度解析》课程目录

    <C++深度解析>课程目录 第1课 - 学习 C++ 的意义 第2课 - C到C++的升级     第3课 - 进化后的const分析 第4课 - 布尔类型和引用 第5课 - 引用的本质分 ...

  8. 【C++第二课】---C到C++的函数升级

    C++中对C语言在函数使用方面做了很大的升级 一﹑内联函数 1.C++中推荐使用内联函数来替代宏片段代码 2.C++中使用关键字inline声明内联函数 例如: inline int func(int ...

  9. Magento学习第一课——目录结构介绍

    Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...

随机推荐

  1. (转)JSON Web Token - 在Web应用间安全地传递信息

    JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. 让我们来假想一下一个场景.在A用户关注了B用户的时候,系统发邮件给B用户, ...

  2. Spring笔记一

    什么是Spring spring (由rod johnson创建的一个开源框架) spring是一个开源框架,spring是于2003 年兴起的一个轻量级的java 开发框架,由rod johnson ...

  3. HTML5实现手机QQ表情功能

    主要素材和JS来自QQ空间触屏版( http://m.qzone.com ),我只是代码的搬运工.代码下载. 预览请使用较新版的Chrome,然后启用开发者工具,设备模式.详见:(http://www ...

  4. java第五天

    p37: 练习1 /** * Created by xkfx on 2017/2/22. */ public class DataOnly { int anInt; char aChar; publi ...

  5. 了解下Mysql的间隙锁及产生的原因

    什么是间隙锁当我们用范围条件而不是相等条件检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁:对于键值在条件范围内但不存在的记录,叫做“间隙(GAP)”,InnoDB也 ...

  6. linux实践--字符集

    一.ASCII码 首先懂得ASCII码表 二 八 十 十六 缩写/字符 0000 0000 0 0 00 NUL(null) 0000 0001 1 1 01 SOH(start of headlin ...

  7. 【postman】利用谷歌浏览器插件生成代码

    Postman这款工具可以让你很方便的测试你的Web API,那如果你实在是没办法用Postman,必须手写代码,又或者你有别的需求是Postman没法实现的,你必须写一个特殊的script或App来 ...

  8. python爬虫scrapy学习之篇二

    继上篇<python之urllib2简单解析HTML页面>之后学习使用Python比较有名的爬虫scrapy.网上搜到两篇相应的文档,一篇是较早版本的中文文档Scrapy 0.24 文档, ...

  9. vim 安装Vundle.vim

    1.下载 git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim 2.配置vimrc set no ...

  10. render:h => h(App) 是什么意思?

    在学习vue.js时,使用vue-cli创建了一个vue项目,main.js文件中有一行代码不知道什么意思.在网上搜索得到如下解答: 参考一:https://www.cnblogs.com/longy ...