常在頭我看到聲明const全局變量時需要靜態嗎?
//global namespace, not in class
static const int my_global =1984;
但最近我瞭解到,常量意味着內部鏈接的,所以我不知道犯規,使靜態不必要的?
常在頭我看到聲明const全局變量時需要靜態嗎?
//global namespace, not in class
static const int my_global =1984;
但最近我瞭解到,常量意味着內部鏈接的,所以我不知道犯規,使靜態不必要的?
這取決於。在C++中,這是沒有必要的,但是有些人(包括我自己)喜歡將其放入其中,理由是要說出我們的意思。當然,如果頭文件也要在C中使用,這是必要的(但對於C中的許多用途,您需要一個#define
)。
在C++中,使用static關鍵字來防止全局鏈接是不必要的(冗餘),因爲const會爲標準C++(C++ 98,C++ 03,C++ 11)執行此操作。然而,在C中,static關鍵字對於變量具有本地(文件)關聯是必需的。由於許多C編程習慣已習慣於習慣於C++(有很多重疊),有些人可能會不經過考慮就習慣這種習慣。我聽說它認爲C++中用於指示非全局鏈接的冗餘靜態關鍵字有助於C程序員理解。
我自己更喜歡使用C++語言編程的精確度,因此我們不會在C++中延續C代碼,這會導致細微的錯誤,或者至少浪費代碼和冗餘代碼(例如習慣性檢查NULL之前打電話刪除指針
你覺得事情是矛盾的/多餘的?我不明白他們是怎麼回事。「靜態」將給予聲明內部聯繫***以及***,這是不是多餘的:不相關 – sehe
如果沒有'static',每次頭文件包含#include都會有一個新的變量定義。 – acraig5075
@ acraig5075我不明白...頭部守衛確保qou只包含一次,即使您的代碼中包含50x,包括#include – NoSenseEtAl