第2课 C到C++的升级

  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语言。

  

原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9503295.html

时间: 2024-10-10 17:52:06

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

第2课 - C 到 C++ 的升级

第2课 - C 到 C++ 的升级 1. C与C++的关系 (1)C++继承了所有的C特性 (2)C++在C的基础上提供了更多的语法和特性 (3)C++的设计目标是运行效率和与开发效率的统一 2. C到C++的升级 (1)C++更强调语言的实用性,所有的变量都可以在需要使用时再定义. 对比:C语言中的变量都必须在作用域开始的位置定义 (2)C++中的register只是一个兼容的作用.  - register关键字 ①背景:代码段在使用局部变量时,首先要把栈内存中的变量放到CPU的通用寄存器中.

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

以下就是我收集的教程地址,之前我收集到的都是一课一课下载的,虽然这样,我也下载完了天草的全部课程.这里分享的是在一起的iso文件,比起一课课下载爽多了.~~ 还有这些教程都是从零起点开始教的,不用担心学不会.~~ 个人建议先看脱壳~然后看破解的 _________________________________________________________________________________ 黑鹰VIP破解教程(50课时)第一课           破解工具的介绍 第二课     

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

第一章 课程介绍和学习路线 1.微服务架构SpringCloud课程介绍 简介:课程介绍和课程大纲讲解,讲课风格和重点内容理解技巧 2.技术选型和学后水平 简介:课程所需基础和技术选型讲解,学完课程可以到达怎样的程度, 1.IDEA JDK8 Maven SpringBoot基础 Linux 2.理解掌握并开发SpringCloud里面主流架构和组件的基础使用,还有部分源码原理的理解 3.掌握学习的技巧和解决问题的思路 第二章 架构演进和分布式系统基础知识 1.传统架构演进到分布式架构 简介:讲

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

第一章 课程介绍和学习路线 1.微服务架构SpringCloud课程介绍 简介:课程介绍和课程大纲讲解,讲课风格和重点内容理解技巧2.技术选型和学后水平 简介:课程所需基础和技术选型讲解,学完课程可以到达怎样的程度, 第二章 架构演进和分布式系统基础知识 1.传统架构演进到分布式架构 简介:讲解单机应用和分布式应用架构演进基础知识 (画图)2.微服务核心基础讲解 简介:讲解微服务核心知识 :网关.服务发现注册.配置中心.链路追踪.负载均衡器.熔断3.常见的微服务框架 简介:讲解常用的微服务框架4

微服务SpringCloud+Docker入门到高级实战

第一章 课程介绍和学习路线 1.微服务架构SpringCloud课程介绍简介:课程介绍和课程大纲讲解,讲课风格和重点内容理解技巧2.技术选型和学后水平简介:课程所需基础和技术选型讲解,学完课程可以到达怎样的程度, 第二章 架构演进和分布式系统基础知识 1.传统架构演进到分布式架构简介:讲解单机应用和分布式应用架构演进基础知识 (画图)2.微服务核心基础讲解简介:讲解微服务核心知识 :网关.服务发现注册.配置中心.链路追踪.负载均衡器.熔断3.常见的微服务框架简介:讲解常用的微服务框架4.微服务下

少儿编程沸沸扬扬,教育方法不能迷迷糊糊

摘要 本文是<马克带你学编程>系列第3篇,通过前两篇文章我们一起探讨了少儿编程是什么.少儿编程学什么,本篇文章将带您了解『少儿编程怎么学』,以便于在编程少年养成过程中获得事半功倍的效果. 少儿的学习特点与大人全然不同,他们对难度级别的过渡更为敏感,一旦跟不上节奏产生为难情绪,很容易丧失信心和兴趣.如果直接拿几本大人看着都头痛的C++代码精髓或者JAVA编程思想之类的大部头给孩子看,不出意外的话,编程会成为这个可怜孩子的噩梦,甚至他这辈子都不愿意再学编程了. 少儿编程与传统的语文.数学差异比较大

Linux实战技能100讲

课程目录:第1课.课程介绍第2课.内容综述第3课.什么是Linux第4课.Linux的内核版本及常见发行版第5课.安装VirtualBox虚拟机第6课.在虚拟机中安装Linux第7课.第一次启动Linux第8课.万能的帮助命令:man help info第9课.初识pwd和ls命令第10课.解ls命令第11课.解cd命令第12课.建和删除目录第13课.制和移动目录第14课.何在Linux下进行文本查看第15课.包压缩和解压缩第16课.i的四种模式第17课.im的正常模式第18课.im的命令模式第

Asp.Net Web API 2第四课——HttpClient消息处理器

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 Asp.Net Web API 导航   Asp.Net Web API第一课:入门http://www.cnblogs.com/aehyok/p/3432158.html Asp.Net Web API第二课:CRUD操作http://www

【Linux探索之旅】第二部分第七课:软件安装,如虎添翼

内容简介 1.第二部分第七课:软件安装,如虎添翼 2.第二部分第八课预告:RTFM 阅读那该死的手册 软件安装,如虎添翼 这一课也会相对比较轻松,所以好好享受吧. 我们来谈谈Linux下软件的安装,会在我们的Ubuntu这个Linux发行版中演示. 一般提到软件安装,有过Windows系统使用经验的朋友肯定会深有体会,那个麻烦啊,大致流程是这样的: 在搜索引擎(比如百度或google)中搜索我们的软件名称. 看到一个不错的结果,点击进入.如果是官网一般会进入官网. 下载此软件的安装程序. 双击下