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關鍵字增強