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. 幕布V1.1.9最新版漏洞集合

    0X00 前言 幕布本人最早接触是在P神的知识星球里面看到P神推荐的,后来下了个用着还挺好用. 之前一直都放一些零零散散的笔记,最近整理的时候,一时兴起,本着漏洞源于生活的态度,遂对幕布的安全性做了些 ...

  2. Centos7 安装pyquery 等包的简易方法

      单独下载安装模块: sudo mkdir /home/pythonmodule sudo wget https://www.crummy.com/software/BeautifulSoup/bs ...

  3. SQLite中的运算符表达式

    SQLite中的运算符表达式 在SQLite中,运算符包括了一元运算符,二元运算符(二进制运算符)和三元元素符.图3.12中给出了这些运算符需要的参数以及优先级.其中,一元运算符的优先级最高,三元运算 ...

  4. Python3基础之异常结构

    自定义异常类 class ShortInputException(Exception): def __init__(self, length, atleast): Exception.__init__ ...

  5. bootStrap中的ul导航

    <!doctype html><html > <head> <meta charset="utf-8"> <link rel= ...

  6. [模板][P3377]杜教筛

    Description: 求 $ \sum_{i=1}^n \phi(i) ,\sum_{i=1}^n \mu(i)$ Hint: \(n<=10^{10}​\) Solution: 考虑积性函 ...

  7. AngularJS中使用$parse或$eval在运行时对Scope变量赋值

    在"AngularJS中自定义有关一个表格的Directive"中自定义了一个有关表格的Direcitve,其表格的表现方式是这样的: <table-helper datas ...

  8. Unity中巧用协程和游戏对象的生命周期处理游戏重启的问题

    主要用到协程(Coroutines)和游戏对象的生命周期(GameObject Lifecycle)基础知识,巧妙解决了游戏重启的问题. 关于协程,这里有篇文章我觉得写的非常好,理解起来也很容易.推荐 ...

  9. Android性能优化-线程性能优化

    原文链接:Better Performance through Threading 线程的性能 熟练使用Android上的线程可以帮助你提高应用程序的性能. 本篇文章讨论了使用线程的几个方面:使用UI ...

  10. MySQL空间索引简单使用

    简述 MySQL在5.7之后的版本支持了空间索引,而且支持OpenGIS几何数据模型.国内的MySQL相关的书籍都比较老了,在这方面有详细描述的还没有见过.有一本比较新的PostgreSQL的数据介绍 ...