C++笔记010:C++对C的扩展——register关键字增强
register关键字:请求编译器让变量直接放到CPU内部寄存器里面,而不是通过内存寻址访问,速度快。
在C语言中,register修饰的变量不能取地址,去寄存器变量的地址在C语言里面是会出错的。
int main()
{
register int a=0;
printf("&a=%x\n",&a);
return 0;
}
编译报错!
同样的代码我们放到C++编译环境下,发现编译是通过的!
#include<iostream>
using namespace std;
int main()
{
register int a=0;
printf("&a=%x\n",&a);
system("pause");
return 0;
}
运行结果:
&a=45fa78
请按任意键继续...
在C++中依然支持register关键字,C++编译器有自己的优化方式,不使用register也可能做优化;并且C++中可以取得register变量的地址,C++编译器发现程序中需要取register变量的地址时,register对变量的声明变的无效。早期的C语言编译器不会对代码进行优化,因此register变量是个很好的补充。
我们说一下C++编译器的优化方式:
#include<iostream>
using namespace std;
int main()
{
register int a=0;
printf("&a=%x\n",&a);
for(int i=0;i<1000;i++)
{
printf("i:%d\n",i);
}
system("pause");
return 0;
}
像for循环这种频繁使用i的地方,C++编译器会做优化,将变量i放到寄存器里面,加快程序的执行速度。也就是C++即使不用关键字register也会优化。
C++笔记010:C++对C的扩展——register关键字增强的更多相关文章
- Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)
计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...
- golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题
golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题 今天测试了重新建一个项目生成新的表,然后复制到旧的项目 ...
- ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法
一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归. ...
- JavaScript学习笔记--ES6学习(四) 字符串的扩展
ES6对字符串进行了一些扩展,主要表现在对Unicode 大于\uFFFF的字符的处理上. 1. ES6中字符的Unicode表示方法 在ES5中,字符串的Unicode表示方法: \uxxxx . ...
- JavaScript学习笔记--ES6学习(五) 数值的扩展
ES6 对于数值类型 (Number) 进行了一下扩展: 1.对于二进制和八进制提供了新的写法 ES6对于二进制和八进制的数值提供了新的写法,分别用0b (或者0B) 和0o (或者0o) 表示.例如 ...
- objective-C学习笔记(十一)类别和扩展
类别 类别是对外的,外部都可以访问 类别是在没有源代码或者基于某些特定场合的情况下,为一个类增加功能(方法).或者用于给一个特别大的类进行分割. 命名规则:类名+扩展方法,如NSString 可以添加 ...
- PHP7 学习笔记(五)安装event扩展(libevent)
一.描述:有效安排I/O,时间和信号的扩展 使用可用于特定平台的最佳I/O通知机制的事件,是PHP基础设施的libevent端口. 二.下载地址:http://pecl.php.net/package ...
- Python学习笔记010——匿名函数lambda
1 语法 my_lambda = lambda arg1, arg2 : arg1 + arg2 + 1 arg1.arg2:参数 arg1 + arg2 + 1 :表达式 2 描述 匿名函数不需要r ...
- C++笔记015:C++对C的扩展——三目运算符功能增强
原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 三目运算符在C编译器中的表现: int main() { int a=10; int b=20; //三目运算符是一个表达式,表达式不能做 ...
随机推荐
- spring mvc跨域(ajax post json)--filter方案
@RequestMapping(value = "/login.do",method = RequestMethod.POST) public Message login(Http ...
- jodatime 时间比较
public ArrayList<CalcPeriod> getCalcPeriods() { DateTime now = DateTime.now(); DateTime.Proper ...
- Modelsim的使用——复杂的仿真
相对于简单的仿真,复杂的仿真是指由多个文件.甚至调用了IP核.使用tcl脚本进行的仿真.其实仿真步骤跟图形化的差不多,只不过每一步用脚本写好,然后再在软件里面run一下,主要过程就是: 1.准备好各种 ...
- Python REST
Django REST framework 1. 什么是REST REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译 ...
- Hive函数:GROUPING SETS,GROUPING__ID,CUBE,ROLLUP
参考:lxw大数据田地:http://lxw1234.com/archives/2015/04/193.htm 数据准备: CREATE EXTERNAL TABLE test_data ( mont ...
- devops基本流程
概要 源代码管理: 工具:Subversion (SVN) Concurrent Version System (CVS) Git SCCS Revision control systems Bitb ...
- No Java compiler available
<!-- 添加tomcat支持 --> <dependency> <groupId>org.springframework.boot</groupId> ...
- MyBatis 与 Spring 整合
MyBatis-Spring 项目 目前大部分的 Java 互联网项目,都是用 Spring MVC + Spring + MyBatis 搭建平台的. 使用 Spring IoC 可以有效的管理各类 ...
- [LeetCode] Split Linked List in Parts 拆分链表成部分
Given a (singly) linked list with head node root, write a function to split the linked list into k c ...
- C#中string的相关方法
下面的方法一般都有很多重载形式,作为初学者的我先把我用过的记录下来吧...以后用到其他的可以一点点添加: 直接上例子吧.先定义两个字符串str1,str2(不要吐槽命名==) string str1, ...