取決於上下文:
像C++很多事情,static
意味着不同的事情取決於它的上下文。
對於同一個詞來說,在C++中非常常見,這取決於上下文的含義。
例如:
*
用於乘法,解除引用一個指針,和創建指針。
&
用於獲取變量的地址,聲明參考以及作爲按位AND運算符。
全球使用靜態:
如果聲明函數和變量作爲一個類的靜態之外,在全球範圍內,它是特定於只文件。如果您嘗試在其他文件中使用該變量或函數(通過前向聲明),將會出現鏈接錯誤。
例子:
a.cpp:
static void fn()
{
cout<<"hello a!"<<endl;
}
b.cpp:
void fn();
void gn()
{
fn();//causes linking error
}
此功能允許您使用,沒有其他的文件永遠不會看到一個功能,這樣你不引起可能的多次定義符號的鏈接器錯誤。要做到這一點的最佳方法是採用匿名的命名空間,但:
a.cpp:
namespace
{
void fn() // will be static to a.cpp
{
cout<<"hello a!"<<endl;
}
}
類內部用靜態的:
如果聲明函數或變量爲靜態的內部類(或結構體),它是一個類函數或類變量。這意味着整個班級只有一個。一個類函數只能使用類變量。類變量在該類的所有實例中共享。
class C
{
public:
static void fn()
{
y = 4;//<--- compiling error
// can't access member variable within a static function.
}
int y;
}
這是一個偉大的功能,如果你有一些是具體到你的類的對象,而不是具體的一個實例使用。
內部功能使用的靜態:
如果你聲明一個函數內部的變量作爲靜態的,你可以考慮的變量值將在通話持續。它只會被初始化一次。
例子:
//Will print 0, then 1, then 2, ...
void persistentPrintX()
{
static int x = 0;
cout << x << endl;
x++;
}
我個人儘量避免這種情況,你可能應。擁有全球化的國家並不好。具有相同輸入保證相同輸出的函數會更好。
就像在英語:
的上下文相關的含義的概念並不具體到C++,你甚至可以看到它在英語語言。
- 我要
screen
電影(意味着顯示出電影)
- 電視上的
screen
壞了(指電視機的一部分)在其他編程語言
其他的含義:
根據編程語言的不同,可能會有不同的含義,但大多數人認爲當你說static
是第一類vari能夠/函數vs成員變量/函數。
您是否具體詢問在類/結構之外聲明的函數? – Bill 2010-02-10 14:53:00
我一般都在問,謝謝你的評論,但是Brian已經回答了我的問題。 – Dooms101 2010-02-10 15:27:53