沒有躲過的坑

2021-12-29 22:30:04 字數 897 閱讀 8309

工作中是這樣的,a類中有乙個成員變數x,最開始宣告為私有:

class a;現在需要在另乙個cpp中使用這個x,所以要把它變為共有並且靜態:

class a;由此可見:

靜態資料成員和普通資料成員一樣遵從public,protected,private訪問規則。

此時,編譯,我們會得到乙個錯誤,原因就是x沒有被初始化。

所以記得給靜態成員變數初始化!

好的,我們初始化:

class a;編譯還是會產生錯誤,原因是這樣:

靜態成員屬於類作用域,但不屬於類物件,和普通的static變數一樣,程式一執行就分配記憶體並初始化,生命週期和程式一致。

所以,在類的建構函式裡初始化static變數顯然是不合理的。

所以,我們需要在類外,對static成員變數進行初始化:

此時要略去關鍵字static:

class a;

int a::x = 0;其實我們可以在類中對static成員變數初始化的,就是使用關鍵字const進行修飾

class a;這個時候不要糾結:

static const 與const static是一樣的,沒有區別

於是你突發奇想,那既然可以使用const就可以再類中對static變數進行初始化,那麼我這麼幹:

class a;抱歉,錯誤:

只有靜態整型常量才能在類中初始化

那按照上面的邏輯,這樣的**會報錯?

class a;想多了,上面的**可以正常執行,和解?

char也是整型變數!!

沒有躲過的坑

今天偶然發現的問題,就是自己寫的win32程式安裝在c盤program files x86 資料夾下就會產生異常,而安裝在其他資料夾,即使是d盤的program files x86 下,程式也可以完美執行。引起這個,肯定是許可權的問題。這個軟體執行時,需要讀寫資料庫,以及各種快取資料。這就是我給自己...

沒有躲過的坑 指標(記憶體洩露)

c 被人罵娘最多的就是指標。夜深人靜的時候,拿出幾個使用指標容易出現的坑兒。可能我的語言描述有些讓人費勁,盡量用 說話。通過指向類的null指標呼叫類的成員函式 試圖用乙個null指標呼叫類的成員函式,導致崩潰 include using namespace std class a void set...

沒有躲過的坑 重定義關鍵字

從學習程式語言開始,我們就知道變數或是函式的命名不能使用系統的關鍵字。但是有時候,你不得不這麼做。比如mac ios android windows共用乙個底層 這樣為了使底層更加通用,有時候就會忽略某種語言的某個關鍵字。也許關鍵字a對於win32就是乙個系統關鍵字,而a不是objective c的...