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. ps 图层解锁后变成全格子(全透明)的解决方法

    其实是因为同时打开了好几个ps文件正在编辑中,所以解决方法就是重启ps,然后单独编辑一个文件,解锁后就不会再出现这种情况能,就能正常编辑了

  2. 搜索引擎ElasticSearch系列(三): ElasticSearch2.4.4 bigdesk插件安装

    一:ElasticSearch bigdesk插件简介 bigdesk是elasticsearch的一个集群监控工具,可以通过它来查看es集群的各种状态,如:cpu.内存使用情况,索引数据.搜索情况, ...

  3. sqlite两表更新update

    1 2 3 4 5 6 7 8 9 10 11 12 UPDATE t1 SET Column1 =   ( SELECT Columnx    FROM t2    WHERE t2. KEY = ...

  4. HDU-4055:Number String

    链接:HDU-4055:Number String 题意:给你一个字符串s,s[i] = 'D'表示排列中a[i] > a[i+1],s[i] = 'I'表示排列中a[i] < a[i+1 ...

  5. UVa 10071

    简单运动学公式 v=v0+at x=v0t+1/2*a*t^2=2vt #include<stdio.h> int main() { int v, t; while((scanf(&quo ...

  6. 【转】React-Native 实现增量热更新的思路

    所谓热更新就是在不重新安装的前提下进行代码和资源的更新,相信在整个宇宙中还不存在觉得热更新不重要的程序猿. 增量热更新就更牛逼了,只需要把修改过和新增的代码和资源推送给用户下载即可,增量部分的代码和资 ...

  7. 从一个app开始学iOS

    在大学上了4年学,老师一直给灌输的思想就是,从细微处着手最后看到整体.举个网站的例子.第一个学期老师安排一门课java语言,期末考试就是考试java语言的知识.第二学期java web,第一次课配置j ...

  8. C#高级编程 (第六版) 学习 第三章:对象和类型

    第三章 对象和类型 1,类和结构 类存储在托管堆上 结构存储在堆栈上   2,类成员 类中的数据和函数称为类成员 数据成员 数据成员包括了字段.常量和事件   函数成员 方法:与某个类相关的函数,可以 ...

  9. ssh: Could not resolve hostname问题终于解决了?

    1.如果系统为64位,无法启动启动hdfs: ./sbin/start-dfs.sh.并有以下错误: sed: -e expression #1, char 6: unknown option to  ...

  10. 2nd 词频统计效能测试

    词频统计效能测试 使用性能分析工具分析结果如下 :