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. HDU 2222 Keywords Search (AC自动机)(模板题)

    <题目链接> 题目大意: 给你一些单词,和一个字符串,问你这个字符串中含有多少个上面的单词. 解题分析: 这是多模匹配问题,如果用KMP的话,对每一个单词,都跑一遍KMP,那么当单词数量非 ...

  2. 附001.Docker阿里云Registry加速器配置

    一 安装配置docker 1.1 安装docker 见<002.docker版本及安装>. 1.2 配置国内阿里云加速器 见<002.docker版本及安装>. 二 配置阿里云 ...

  3. node+koa2 使用ejs模版

    1.进入项目下,npm install -save ejs 2.app.js加入: const ejs = require('ejs'); app.use(views(__dirname + '/vi ...

  4. Android弹出Toast工具类总结

    Android弹出Toast工具类总结,包括系统自带的,也包括自定义的. public class ToastUtil { public ToastUtil() { } public static T ...

  5. Django拾遗--pagination、sitemap、admin、form

    Django拾遗--pagination.sitemap.admin.form pagination 其实这个分页模块的原理就是根据设定的每页条数来分割queryset.查询结果/每页子项数目=页数 ...

  6. linux中内存超出后可以这样

    http://www.cnblogs.com/hongten/archive/2012/11/16/java_PermGen_space.html

  7. git配置SSH Key,上传本地代码至github

    git配置全局的name和email git config --global user.name "name" git config --global user.email &qu ...

  8. SQL数据库连接到服务器出错——无法连接到XXX

    问题:Windows或者SQL Server身份验证下,出现连接到服务器出错 解决方式: 1.检查实例名称是否正确,如下 根据自己电脑的实际名称修改修改如下: 1)Microsoft SQL Serv ...

  9. 动态创建的 CEdit 被限制长度,增加 ES_AUTOHSCROLL 属性;被无法Tab激活焦点,增加 WS_TABSTOP 属性(转)

    动态创建的 CEdit 被限制长度,增加 ES_AUTOHSCROLL 属性:被无法Tab激活焦点,增加 WS_TABSTOP 属性. CEdit m_editUrl; // ES_AUTOHSCRO ...

  10. nginx 负载均衡集群解决方案 healthcheck_nginx_upstreams模块测试 (二)

    在这里详细讲解healthcheck_nginx_upstreams模块中存在的bug,对于healthcheck_nginx_upstreams模块的安装和使用请阅读上一篇blog进行学习. 测试环 ...