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也会优化。