簡體   English   中英

如果在其他地方聲明為const,為什么必須在定義時重復const說明符?

[英]Why does one have to repeat the const specifier at definition time, if declaration as const is done somewhere else?

解決了這個簡單的問題之后 ,我不得不問:

->在類ex的H文件中,定義了const靜態成員,例如:

class ex {
    const static int my_ex;
};

->在CPP文件中指定值

ex::my_ex = 32;  

然后出現錯誤“沖突聲明”(以及“未命名類型”)。 我知道CPP文件中的定義也是一個聲明 ,它確實會產生從鏈接器BUT看到的沖突,為什么僅關於const說明符(和類型)而不是靜態說明符? 我只需要寫

const int ex::my_ex = 32;

進行編譯。 但是不是靜態的...為什么不呢? 為什么我不能只定義而不重復聲明相關的步驟(類型,特定標識符)?

這是歷史性的事情。

從C開始,定義上的static表示“內部鏈接”。 當C ++出現並添加了類時,Bjarne需要一個關鍵字來表示靜態成員。 他不想添加新的關鍵字(直到今天仍然普遍存在這種偏好),他改為使用static關鍵字。

現在, static表示兩種不同的情況,具體取決於放置的位置。 因此,您不能在此處編寫static ,因為它意味着其他含義。 因此,這種語言不需要您,因為那很愚蠢。

除了這種推理, 事實就是這樣 當您創建一種語言時,您會在規范的簡單性與實現的簡易性與使用的簡單性之間取得平衡,並提出了一系列規則。 在某些時候,您必須停止爭論“為什么”創建了一些微不足道的規則,然后繼續編寫程序。

暫無
暫無

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

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