c++对c的加强

时间:2022-02-23 00:59:57

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++:

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定义“结构”时的不同。

c++对c的加强

c++对c的加强

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

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

c++对c的加强

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

随机推荐

  1. web端跨域调用webapi

    在做Web开发中,常常会遇到跨域的问题,到目前为止,已经有非常多的跨域解决方案. 通过自己的研究以及在网上看了一些大神的博客,写了一个Demo 首先新建一个webapi的程序,如下图所示: 由于微软已 ...

  2. 最长不下降子序列的O(n^2)算法和O(nlogn)算法

    一.简单的O(n^2)的算法 很容易想到用动态规划做.设lis[]用于保存第1~i元素元素中最长不下降序列的长度,则lis[i]=max(lis[j])+1,且num[i]>num[j],i&g ...

  3. 怎样为EXCEL2010添加下拉列表

    注意,下面是Excel2010的步骤和截图,其他版本的Excel类似.   首先用鼠标左键点击你要添加下拉列表的单元格. 如果你只想部分区域有下拉列表,也可以选择部分区域. 下面图片是选择的整个列都是 ...

  4. 普通用户登录Oracle DB Control

    使用 sys 或者 system 用户登录 Oracle DB Control 是没有问题的. 但是,如果是普通的用户需要登录Oracle DB Control,建表或者视图之类的, 则需要授权 SE ...

  5. GtkImageMenuItem

    做了个工具条,每次点arrow出来的菜单都没图标,郁闷;查来查去,看源码,看css,最后知道GtkAction缺省就是对应GtkImageMenuItem,再一试,跟toolbar无关,换menu也不 ...

  6. JetBrains GoLand 注册码

    选择license server 输入 http://idea.youbbs.org 完成 要求联网

  7. STL容器之优先队列

    STL容器之优先队列 优先级队列,以前刷题的时候用的比较熟,现在竟然我只能记得它的关键字是priority_queue(太伤了).在一些定义了权重的地方这个数据结构是很有用的. 先回顾队列的定义:队列 ...

  8. git Bush应用崩溃If no other git process is currently running, this probably means a git process crashed

    问题: 用git Bush提交的时候遇到一个问题,不论做什么操作都遇到下面的错误信息: fatal: Unable to create 'XXXXXXXXX' : File exists. If no ...

  9. perl 查看某个模块的安装路径

    perldoc 命令可以查看某个模块的安装路径 命令: perldoc -l Bio::Seq 返回值如下: /usr/local/share/perl5/Bio/Seq.pm

  10. decltype类型声明- 现代C++新特性总结

    decltype类型声明 有时会遇到这样的情况:希望从表达式的类型推断出要定义的变量的类型,但不想用该表达式的值去初始化变量.为了满足这一需求,C++11引入了decltype,它的作用是选择并返回操 ...