考慮以下結構:
struct Toto {
static int a;
static void Print() {
std::cout << a;
}
};
以及使用同一 cpp 檔案 (main.cpp) 中的結構的以下主函式:
int main()
{
Toto::Print();
}
構建它會產生以下錯誤:
錯誤 LNK2001 未決議的外部符號“public:static int Toto::a”
我從https://en.cppreference.com/w/cpp/language/static了解到
類的靜態成員不與類的物件相關聯
因此,我被告知我們必須在結構外部宣告變數 Toto::a,在事務單元中如下:
int Toto::a;
從同一來源它說
靜態成員函式不與任何物件關聯。
然后
靜態資料成員不與任何物件相關聯。
為什么我必須宣告靜態變數而不是靜態函式?呼叫本身是宣告嗎?如果不是,還有什么可以讓我繞過該宣告?
uj5u.com熱心網友回復:
靜態成員函式是匯編級別的普通函式。區別只是其中不存在的隱藏指標“this”。它們基本上是全域函式,與類名的 C 范圍內的任何其他非靜態或非成員(而非行內)函式一樣存在。函式范圍是 C 的東西,它們不存在于 CPU 級別。
靜態變數是不同的。它們在創建任何類物件之前就存在。創建類實體時不會創建它們。他們作為全域變數存在。
也許它的做法是為了強調這種差異。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/460295.html