閱讀816 返回首頁    go 阿裏雲 go 技術社區[雲棲]


變量的內存存放與作用域

1.變量的聲明、定義、初始化

一個程序可由多個源文件實現。

變量可以多次聲明,但隻能被定義一次。

聲明通過extern關鍵字實現。

extern int i;  //聲明

int j;   //定義

2.變量的內存存放

全局變量與局部變量在沒有初始化時,取初值的方式不同。前者是全0.

c++內存分為代碼常量全局//靜態存儲區。

不同變量的存儲位置:

全局/靜態存儲區——全局變量,static變量;

棧——局部變量、函數調用時的參數。棧的容量一般比較有限;

堆——new運算符分配,需由delete釋放;若分配失敗,new返回NULL,記得安全性檢查。

常量存儲區——這是一塊比較特殊的存儲區,裏麵存放的是常量。

3.標示符的作用域

 for(int i=0;i<10;i++){//i僅在這裏和for小括號內有效} 

c++中大多數作用域都以大括號分隔。

:: 類的作用域分辨符

#include<iostream>
using namespace std;
void show(){cout<<"hello";}
class A{
public:
		static void show(){cout<<"hi ";}
		static void fun(){
			show();  //成員函數
			::show(); //全局函數
		}

};
int main(int argc, char** argv)
{
	A::fun();
	return 0;
}
/*hi hello*/


4.內聯函數

函數的調用是有開銷的。比如:保存CPU環境、實參到形參的傳遞、函數執行完返回、恢複CPU環境。而使用inline函數可以達到空間換時間的效果。它告訴編譯器把此函數插入到調用的地方去。

關鍵字inline 必須與函數定義體放在一起才能使函數成為內聯,僅將inline 放在函數聲明前麵不起任何作用。 

如下風格的函數Foo 不能成為內聯函數: 

inline void Foo(int x, int y); // inline 僅與函數聲明放在一起 

void Foo(int x, int y){} 

 

而如下風格的函數Foo 則成為內聯函數: 

void Foo(int x, int y); 

inline void Foo(int x, int y) // inline 與函數定義體放在一起{} 

所以說,inline 是一種“用於實現的關鍵字”,而不是一種“用於聲明的關鍵字”。


 

最後更新:2017-04-03 12:55:42

  上一篇:go 數據類型、表達式 類型轉換
  下一篇:go html5關鍵詞相關整理