C++和其他程序設計語言不同,主函數main中定義的變量也是局部的,只有在主函數中才能使用。
在計算機中,內存被分為不同的區域。按照變量在計算機內的儲存位置來分,變量可以分為自動變量、靜態變量、寄存器變量、外部變量。下面逐個介紹。
- 自動變量auto
如果不專門聲明為其他儲存類型,都是自動變量。因此 auto int a; 和 int a; 是等價的。
## C++11中auto被用於自動推斷了。
- 靜態變量static
如果不希望該程序其他源文件中的函數使用某全局變量,可以設置為靜態變量,保持結構良好。
如果是應用在局部變量,則該變量不再存放在函數對應的幀中,而是存放在全局變量區。函數執行完畢依然存在,在下次函數調用時繼續使用原空間中的值。也就是說可以把該變量的信息帶到下一次函數調用中。
另:1.未被初始化的靜態變量都由系統初始化為0;2.如果程序中既有靜態的局部變量也有全局變量,則系統先消亡靜態的局部變量,再消亡全局變量。
- 寄存器變量register
只有局部自動變量才能定義為寄存器變量。系統會把這些變量的值直接存儲在CPU的寄存器中,用於代替自動變量。
現在的編譯器可以識別出頻繁使用的變量,並且會自動進行優化,不需要程序員去進行聲明,而是編譯器自己決定了。
- 外部變量extern
外部變量一定是全局變量,如果在定義點前或另一個源文件的函數也要使用,就可以設置為外部變量,使用時相當於告訴編譯器此處使用了未見過的變量,將在別處定義。
以上。