静态函数讲解
1、靜態全局變量(又稱全局靜態變量):?
(1)???????????????靜態全局變量的定義:在全局變量前加一個static,使該變量只在這個源文件中可用。?
??
(2)全局變量與全局靜態變量的區別:?
????????(a)若程序由一個源文件構成時,全局變量與全局靜態變量沒有區別。?
??????????(b)若程序由多個源文件構成時,全局變量與全局靜態變量不同:全局靜態變量使得該變量成為定義該變量的源文件所獨享,即:全局靜態變量對組成該程序的其它源文件是無效的。?
??
(3)靜態全局變量的作用:?
(a)不必擔心其它源文件使用相同變量名,彼此相互獨立。?
(b)在某源文件中定義的靜態全局變量不能被其他源文件使用或修改。?
例如:一個程序由兩個源文件組成,其中在一個源文件中定義了“int???n;”,在另一個源文件中定義了“static???int???n;”則程序給它們分別分配了不同的空間,兩個值互不干擾。?
??
例如:下面在file1.cpp中聲明全局變量n,在file2.cpp中定義全局靜態變量n。文件file1.cpp和file2.cpp單獨編譯都能通過,但連接時,file1.cpp中的變量n找不到定義,產生連接錯誤。?
//???file1.cpp?
#???include???<iostream.h>?
void???fn()?
extern???int???n;?
void???main()?
{?
n=20;?
cout?<?<n?<?<endl;?
fn();?
}?
//???file2.cpp?
#???include???<iostream.h>?
static???int???n;?????//???默認初始化為0,注意此處定義的n???只能在file2.cpp中使用。?
void???fn()?
{?
n++;?
cout?<?<n?<?<endl;?
}?
??
2、靜態函數:使某個函數只在一個源文件中有效,不能被其他源文件所用。?
定義:在函數前面加上static。?
說明:函數的聲明和定義默認情況下在整個程序中是extern的。?
靜態函數的效果:?
(1)它允其他源文件建立并使用同名的函數,而不相互沖突。?
(2)???????????????聲明為靜態的函數不能被其他源文件所調用,因為它的名字不能得到。
(1)???????????????靜態全局變量的定義:在全局變量前加一個static,使該變量只在這個源文件中可用。?
??
(2)全局變量與全局靜態變量的區別:?
????????(a)若程序由一個源文件構成時,全局變量與全局靜態變量沒有區別。?
??????????(b)若程序由多個源文件構成時,全局變量與全局靜態變量不同:全局靜態變量使得該變量成為定義該變量的源文件所獨享,即:全局靜態變量對組成該程序的其它源文件是無效的。?
??
(3)靜態全局變量的作用:?
(a)不必擔心其它源文件使用相同變量名,彼此相互獨立。?
(b)在某源文件中定義的靜態全局變量不能被其他源文件使用或修改。?
例如:一個程序由兩個源文件組成,其中在一個源文件中定義了“int???n;”,在另一個源文件中定義了“static???int???n;”則程序給它們分別分配了不同的空間,兩個值互不干擾。?
??
例如:下面在file1.cpp中聲明全局變量n,在file2.cpp中定義全局靜態變量n。文件file1.cpp和file2.cpp單獨編譯都能通過,但連接時,file1.cpp中的變量n找不到定義,產生連接錯誤。?
//???file1.cpp?
#???include???<iostream.h>?
void???fn()?
extern???int???n;?
void???main()?
{?
n=20;?
cout?<?<n?<?<endl;?
fn();?
}?
//???file2.cpp?
#???include???<iostream.h>?
static???int???n;?????//???默認初始化為0,注意此處定義的n???只能在file2.cpp中使用。?
void???fn()?
{?
n++;?
cout?<?<n?<?<endl;?
}?
??
2、靜態函數:使某個函數只在一個源文件中有效,不能被其他源文件所用。?
定義:在函數前面加上static。?
說明:函數的聲明和定義默認情況下在整個程序中是extern的。?
靜態函數的效果:?
(1)它允其他源文件建立并使用同名的函數,而不相互沖突。?
(2)???????????????聲明為靜態的函數不能被其他源文件所調用,因為它的名字不能得到。
總結
- 上一篇: 关于string类型的字符串是否以\0结
- 下一篇: C++之函数参数按引用传递