1. 程式人生 > >C++筆記010:C++對C的擴展——register關鍵字增強

C++筆記010:C++對C的擴展——register關鍵字增強

訪問 可能 執行 mes 我們 name 編譯報錯 gis cpu

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