我正在研究靜態和常量關鍵字。程序員何時使用'static'和'const'關鍵字?
靜態:使用靜態修飾符來聲明靜態成員,該靜態成員屬於類型本身,而不是屬於特定對象。
const:你使用const關鍵字來聲明一個常量字段或一個常量本地。該關鍵字指定該字段或局部變量的值是常量,這意味着它不能被修改。
我想知道關於程序員使用靜態和常量關鍵字的例子。
我正在研究靜態和常量關鍵字。程序員何時使用'static'和'const'關鍵字?
靜態:使用靜態修飾符來聲明靜態成員,該靜態成員屬於類型本身,而不是屬於特定對象。
const:你使用const關鍵字來聲明一個常量字段或一個常量本地。該關鍵字指定該字段或局部變量的值是常量,這意味着它不能被修改。
我想知道關於程序員使用靜態和常量關鍵字的例子。
const的變量或常量,將用於聲明不會改變的值或者你想從防止正在改變。例如,Pi可以在C++中聲明爲常量。
const double kPi = 3.14159265359;
靜態變量有點不同。在類\函數中只存在一個靜態變量實例。
例如:
void foo()
{
static int bar = 0;
printf("%d\n", bar);
++bar;
}
int main()
{
int i;
for(i = 0; i < 5; ++i)
{
foo();
}
}
將打印:
0
1
2
3
4
即使欄超出範圍,它的價值仍然在內存中,所以它只能初始化一次。每次調用foo()時,該值都會遞增。
編輯:
爲了澄清,編譯器將實際上是它產生彙編代碼內的靜態變量保留存儲器。此外,static關鍵字還會告訴編譯器只精確地初始化變量一次。變量的範圍是相同的(在foo函數內部),但是在上述情況下它僅被初始化一次。當函數被調用時,自動變量(例如int i)被壓入調用堆棧。
如果你嘗試覆蓋const變量>? – variable
GCC抱怨拋出錯誤,因爲你基本上說你的const實際上不是一個const。 – csnate
但每次你分配int bar = 0;所以爲什麼它沒有得到解決? – EverythingEthical
如果你想讓任何變量/方法可用,而不考慮靜態成員的對象,但是如果你希望同樣的變量不可修改,那麼const就是解決方案。下面的例子可以幫助你理解這一點。
在下面示例
ONLINE保持用戶數量的在線,它可以改變但是應該可用不論對象
的public class Example
{
//PI should not be changed, with reasons known that it is a constant
public const double PI = 3.14;
//Users currently using the application
public static int ONLINE = 0;
public Example(){ ONLINE++; }
public void dispose(){ ONLINE--; }
public static int loggedInUsers(){ return ONLINE; }
public void GetArea(int radius){return PI*radius*radius; }
}
(所有這一切都爲Langage C++)
嗨,你可以使用常量和靜態關鍵字在少數情況下,對於爲例:
常量
首先,用來說變量不能被修改。
int main()
{
const int toto[4] = {0, 1, 2, 3};
return (0);
}
//我們不能在聲明後修改toto,爲什麼它有用?它保持你的程序設計的狀態
第二個,用來說一個方法不會修改對象狀態。
class toto
{
int i;
public:
int geti() const;
}
// CPP中的所有吸氣劑都使用它。爲什麼它有用?使用該類的開發人員知道他不修改對象狀態
第三個,用於說明傳遞給函數的參數不被函數修改。
int function(const std::string &str)
{
// function cannot modify the object string pass in parameter
}
靜態
首先,過去常說,一個實現的功能是隻知道內一個單一的文件。
static int fct()
{
return (0);
}
//可以調用ONY功能FCT()如果你是誰內就實現
二文件,過去常說,一個參數或方法是共同的所有對象同班。
class toto
{
public :
static int getLol();
};
//每個對象totoObj1,totoObj2 ...將調用相同的功能
第三和最後一個,過去常說,一個變量不相同功能的多個呼叫之間改變狀態的地方聲明
void fct()
{
static i = 0;
std::cout << ++i << std::endl;
}
//這個函數會打印1然後2然後3 ...
如果您有任何疑問,歡迎您:)
我想這個問題會更適合在[programmers.stackexchange.com](http://programmers.stackexchange.com/) – ponciste