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

猜你喜欢

转载自www.cnblogs.com/tyyhmtyyhm/p/8971925.html