1.register关键字的加强

register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度,这只是一种请求,编译器可以拒绝这种申请。

(1)register变量必须是能被CPU所接受的类型。

这通常意味着register变量必须是一个单个的值,并且长度应该小于或者等于整型的长度。不过,有些机器的寄存器也能存放浮点数。寄存器的位数通常和cpu的位数一致。现在32bit和64bit的cpu居多。

(2)因为register变量可能不存放在内存中,所以不能用“&”来获取register变量的地址(c++中可以取地址)。

(3)只有局部自动变量和形式参数可以作为寄存器变量,其它(如全局变量)不行。

在调用一个函数时占用一些寄存器以存放寄存器变量的值,函数调用结束后释放寄存器。此后,在调用另外一个函数时又可以利用这些寄存器来存放该函数的寄存器变量。

(4)局部静态变量不能定义为寄存器变量。不能写成:register static int a;

(5)由于寄存器的数量有限(不同的cpu寄存器数目不一),不能定义任意多个寄存器变量,而且某些寄存器只能接受特定类型的数据(如指针和浮点数),因此真正起作用的register修饰符的数目和类型都依赖于运行程序的机器,而任何多余的register修饰符都将被编译程序所忽略。尤其现代编译器更加智能了,一般情况下不需要我们主动使用寄存器变量。

c:

c++:

为什么c++可以对寄存器变量取地址呢?

c++编译器在遇到对寄存器变量取地址的时候,会忽略你的register请求。

2.变量检测加强

全局变量:

int a;

int a=1;

C语言中可以编译通过(而且没有任何警告),c++中是不允许的。C语言中只有当同名全局变量都赋予初始值时,才会报错,例如:

int a=1;

int a=1;

所以,c++中对变量检测更为严格了。

3.const的加强

在之前的随笔中已经说过了,C语言的const不是常量,c++中的是常量。c++中,const修饰的变量放在符号表中,哪怕指针强制类型转换,也不能更改const修饰的变量的值,这已经是真正的常量了。

4.三目运算符的加强

C语言中三目运算符表达式不能作为左值,但是c++中是可以的。

5.struct关键字的加强

这就自然不用多说了,类是c++的特色之一,这个就不多说了。做个测试,说明c++的struct和C语言的struct定义“结构”时的不同。

6.对函数返回值和参数检测加强

c语言有一些历史遗留问题,函数可以不带返回值,参数还可以不声明类型,但是在c++中是不允许的,C语言中我们也应该规避掉那样的写法。

C语言函数形参不写,代表一切,c++中函数形参不写,代表void。

随机推荐

  1. Burp Suite之爬网模块(二)

    Spider功能 Burp Spider爬网介绍 Burp Spider 是一个映射 web 应用程序的工具.它使用多种智能技术对一个应用程序的内容和功能进行全面的清查. 通过跟踪 HTML 和 Ja ...

  2. 002.HAProxy安装及常见配置

    一 HAProxy安装 官方链接:http://www.haproxy.org/ (国内可能无法打开) 下载连接:http://pkgs.fedoraproject.org/repo/pkgs/hap ...

  3. ESLint + lint-staged 禁用老项目中的es6

    前言 ESLint作为插件化的javascript代码检测工具,为我们的平时的开发保驾护航,好处就不多说了详情查看官网. 问题 有这么一个五年前开发的老项目,机缘巧合到了我们这边来维护. 项目是zep ...

  4. C++泛型线性查找算法——find

    C++泛型线性查找算法--find <泛型编程和STL>笔记及思考. 线性查找可能是最为简单的一类查找算法了.他所作用的数据结构为一维线性的空间.这篇文章主要介绍使用 C++ 实现泛型算法 ...

  5. saxon 处理xslt

    下载saxon : https://sourceforge.net/projects/saxon/?source=typ_redirect 下载后拿到: saxon9he.jar 运行CMD: C:\ ...

  6. 项目冲刺Fifth

    Fifth Sprint 1.各个成员今日完成的任务 蔡振翼:编写博客,了解php 谢孟轩:无 林凯:优化登录判断逻辑,熟悉相关php及mysql数据库技术的使用 肖志豪:帮助组员 吴文清:实现管理员 ...

  7. BZOJ 4552 [Tjoi2016&Heoi2016]排序 线段树的分裂和合并

    https://www.lydsy.com/JudgeOnline/problem.php?id=4552 https://blog.csdn.net/zawedx/article/details/5 ...

  8. 【数据结构与算法】自己动手实现图的BFS和DFS(附完整源码)

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/19617187 图的存储结构 本文的重点在于图的深度优先搜索(DFS)和广度优先搜索(BFS ...

  9. CocosCreator核心概念里的基础点

    1,锚点:是节点位置的参照点,也是自身旋转,缩放的基准点,也是子节点坐标原点.X.Y描述横纵向的锚点位置.注:锚点的取值是可以超过(0,0)~(1,1),即锚点并不在节点尺寸范围内. 2,子节点:子节 ...

  10. ORACLE中的字符串替换 replce、regexp_replace 和 translate

    一.语法 replace(str_source,str1,str2)  把 str_source 中 str1 字符串替换为 str2 字符串,当 str2 为 null 或'' 时,与下个作用相同 ...