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. 配置Tomcat直接显示目录结构和文件列表

    Tomcat是直接显示目录结构和文件列表,只是在配置里面给关闭了. 关键在这里:\conf\web.xml 这个文件有一段配置直接控制Tomcat是允许显示目录结构和文件列表. <servlet ...

  2. 2.5 The Object Model -- Observers

    Ember支持监视任何属性,包括计算的属性.你可以使用Ember.observer为一个对象设置一个监视者: Person = Ember.Object.extend({ //these will b ...

  3. 在GUI程序中使用控制台的两种方法

    win32程序启用控制台(控制台文件名:conout$,conin$,conerr$) //添加控制台,加入在程序构造函数中 AllocConsole(); freopen("conin$& ...

  4. php+mysql事务处理例子详细分析实例

    一.数据引擎innodb用begin,rollback,commit来实现提交事务处理,begin开始事务后出现错误就rollback事务回滚或者没有错误就commit提事务提交确认完成. start ...

  5. Javaworkers团队最终项目总结

    Javaworkers团队最终项目总结 小组成员 20145205武钰 20145222黄亚奇 20145235李涛 20145103冯文华 团队项目总结 案例提出及工程用时 本次项目由十一到十六周共 ...

  6. 经查-- git使用报错及解决办法

    git push 错误 error: failed to push some refs to 'git@github.com:charblus/ ...' 本地和远程的文件应该合并后才能上传本地的新文 ...

  7. Ubuntu 安装zookeeper

    下载zookeeper   Zookeeper下载 下载以后将文件迁移到/home/Hadoop/文件夹下面 hongdada@ubuntu:~/Downloads$ sudo mv zookeepe ...

  8. G_M_网络流A_网络吞吐量

    调了两天的代码,到最后绝望地把I64d改成lld就过了,我真的是醉了. 网络吞吐量 题面:给出一张(n个点,m条边)带权(点权边权均有)无向图,点权为每个点每秒可以接受发送的最大值,边权为花费,保证数 ...

  9. install ros-indigo-pcl-ros

    CMake Warning at /opt/ros/indigo/share/catkin/cmake/catkinConfig.cmake: (find_package): Could not fi ...

  10. npm汇总:npm命令 + 实用插件

    一.npm常用命令,以便查阅: npm install     //运行npm install可根据package.json的配置自动安装所有依赖包 npm uninstall   //卸载依赖,如n ...