簡體   English   中英

為什么非常量靜態成員有多個定義?

[英]Why would a non-constant static member have multiple definitions?

C ++強制程序員在類外部定義一個非常量靜態成員,我不斷看到的原因是如果靜態成員是在類中定義的,這將導致靜態成員的多個定義。 我知道有一個靜態成員的多個定義是壞的,但我不明白這些多個定義甚至會來自何處。 初始化的非常量靜態成員不應該只進入數據部分並且這是唯一的定義嗎?

struct Student {

   static int x = 4; // Why would this result in multiple definitions?

};

另外,我在其他stackoverflow文章中讀到,const靜態成員只是在使用它的地方簡單地內聯到代碼中: 為什么我不能在類中有一個非整數的靜態const成員? 這是由預處理器和所有其他指令處理的嗎? (如果需要,我會在另一篇文章中提出這個問題,但我不確定它是否值得單獨發帖)。

這會發生是因為/當你的標題被包含在多個“翻譯單元”中時(想想.cpp文件)。

然后,每個TU將包含該定義的副本。

在鏈接時,他們會發生沖突。 (鏈接器鏈接每個翻譯單元的對象)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM