0.目录

1.C与C++的关系

2.C到C++的升级

3.小结

1.C与C++的关系

  • C++继承了所有的C特性
  • C++在C的基础上提供了更多的语法和特性
  • C++的设计目标是运行效率与开发效率的统一

2.C到C++的升级

2.1 语言的实用性

C++更强调语言的实用性
C++中所有的变量都可以在需要使用时再定义

而C语言中的变量都必须在作用域开始的位置定义!!
(早期的C89/90标准确实是这样的规定,但是后来的C99标准允许随用随定义,目前大部分编译器都已支持C99标准,但仍有少量编译器没有支持。)

2.2 register关键字

register关键字请求编译器将局部变量存储于寄存器中,在C++中依然支持register关键字
(如果register请求通过的话,那么变量就放在寄存器里面,从而效率就提高了。
register关键字仅仅是一个请求编译器做某事,因此的话编译器完全可以拒绝。
所以一直以来,register在C语言中的地位,虽然对于提高效率来说看上去很重要,但其实很鸡肋。因为编译器发展到后期之后,编译器本身就会做优化了,也许你不写register关键字,编译器仍然会将一个变量存储于寄存器当中。
所以说C语言里面的register关键字就显得在工程开发中比较鸡肋。于是通过这种工程经验,C++里面虽然依旧支持register,但仅仅是为了兼容C语言。)

C++编译器有自己的优化方式:

  • C语言中无法获取register变量的地址
  • C++中可以取得register变量的地址

C++中的register关键字:

  • C++编译器发现程序中需要取register变量的地址时,register对变量的声明变得无效。
  • 早期C语言编译器不会对代码进行优化,因此register变量是一个很好的补充。

2.3 同名的全局变量

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

C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上。(C++直接拒绝这种二义性的做法!)

2.4 struct关键字

  • C语言中的struct定义了一组变量的集合
  • C语言中struct定义的标识符并不是一种新的类型
  • C++中的struct用于定义一个全新的类型


(如果在C语言里面需要将struct定义的这个集合当成一种类型来使用的话,那就必须要通过typedef关键字来重命名一下,这是C语言里的做法。
然而在C++中,有一个重大的改进,就是类型的加强,也就是说,C++里面非常注重类型,在C++里面,就把struct关键字当成一个定义新类型的关键字,只要struct出现了,C++编译器就会认为这里产生了一个全新的类型,因此C和C++中结构体的定义在写法上是等价的。
在C++看来,struct就定义了一个名为Student的新类型,但是C语言看来,这里只是定义了一个变量的集合,并且这个变量的集合有一个名字,叫做_tag_student,它并不是一种新类型。如果非要当成一种新类型来使用,就必须通过typedef给它一个类型名。
C++这样做有什么好处:更清晰,可读性更好。)
也就是说:

2.5 int f() 与 int f(void) 有区别吗?

面试中的小问题,int f() 与 int f(void) 有区别吗?如果有区别是什么?

在C语言中:

  • int f() 表示返回值为 int,接受任意参数的函数
  • f(void) 表示返回值为 int 的无参函数

在C++中:

  • int f() 和 int f(void) 具有相同的意义
  • 都表示返回值为 int 的无参函数

总结:

  • C++中所有的标识符都必须显示的声明类型
  • C语言中的默认类型在C++中是不合法的

3.小结

  • C++更强调实用性,可以在任意的地方声明变量
  • C++中的register只是一个兼容的作用
  • C++编译器能够更好的进行优化
  • C++中的任意标识符都必须显示的指明类型

C++解析(1):C到C++的升级的更多相关文章

  1. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q45-Q48)

    Question 45 You are designing a branding strategy for a customer with a new SharePoint 2010 server f ...

  2. ubuntu下解析udt数据包

    udt是通过udp进行端到端可靠传输的一个协议,有其默认拥塞控制算法. 之前ubuntu下wireshark的版本是1.10,不能直接解析udt数据包[1],升级到最新的2.0.0即可过滤udt数据包 ...

  3. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q57-Q59)

    Question 57You update a solution validator.You need to ensure that all SharePoint solutions are vali ...

  4. Gitlab备份、迁移、恢复和升级

    Gitlab备份.迁移.恢复和升级 自建的Gitlab服务器常常会因为使用时间的增长,其空间容量等硬件需求都需要升级,或者迁移至更高配置的服务器上.备份.迁移.恢复.升级过程如下 1.gitlab备份 ...

  5. Android Recovery OTA升级(一)—— make otapackage

    文件夹 文件夹 概述 make otapackage BUILT_TARGET_FILES_PACKAGE ota_from_target_files WriteFullOTAPackage Sign ...

  6. 将mysql从5.5.25升级到8.0.12

    将mysql从5.5.25升级到8.0.12过程中遇到几个问题,记录如下: 将数据库安装好后,导入原来的数据,启动tomcat,报错unable to load authentication   ca ...

  7. 【公告】淘宝 npm 域名即将切换 && npmmirror 重构升级

    镜像下载.域名解析.时间同步请点击阿里云开源镜像站 前言 本文将包括两部分内容: 淘宝 npm 域名即将停止解析 npmmirror 镜像站大重构升级 原淘宝 npm 域名即将停止解析 正如在< ...

  8. 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.1

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...

  9. 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.2

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...

  10. 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.0.1

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...

随机推荐

  1. 优步UBER司机全国各地奖励政策汇总 (4月11日-4月17日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  2. MySQL入门篇(三)之my.cnf配置文件详解【转】

    转自:https://www.cnblogs.com/panwenbin-logs/p/8360703.html #*** client options 相关选项 ***# #以下选项会被MySQL客 ...

  3. javaweb(二十六)——jsp简单标签标签库开发(二)

    一.JspFragment类介绍 javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段, ...

  4. JMeter:全面的乱码解决方案【转】

    本文是转自https://www.cnblogs.com/mawenqiangios/p/7918583.html 感谢分享者   中文乱码一直都是比较让人棘手的问题,我们在使用Jmeter的过程中, ...

  5. linux-ubuntu常用命令(深圳文鹏)

    系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...

  6. 转:为什么说招到合适的人比融到钱更加重要 - Hiring Great Talent is More Important Than Fund Raising

    我在猎头行业工作了 20 多年,一直在帮助创业公司招聘优秀的人才.我服务过的客户既有 VC 投资的初创企业,也有即将 IPO 的公司.我和 200 多个 VC 合作过,也见过 300 多个客户失败的案 ...

  7. [笔记] mysql5.6一些编译参数

    cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DSYSCONFDIR=/etc \ -DWITH_INNOBASE_STORAGE_ENGINE ...

  8. kafka相关文章引用

    kafka相关内容说明: Kafka压缩 Kafka端到端审计 kafka数据可靠性深度解读 Kafka发送超过broker限定大小的消息时Client和Broker端各自会有什么异常? Kafka之 ...

  9. Java访问控制

    转自:菜鸟教程

  10. Scrum立会报告+燃尽图(Beta阶段第二周第三次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2411 项目地址:https://coding.net/u/wuyy694 ...