重新挖掘了Ulrich Drepper的沼澤並遇到了看起來像是混淆的2個條目。將const指針定義爲const字符串
在first one(全球空間字符串)李晶指出,該字符串應該定義爲:
const char _pcre_ucp_names[] = "blabla";
而已經在second one(函數的字符串),他認爲這應該被聲明爲:
static const char _pcre_ucp_names[] = "blabla";
你能解釋什麼是更好的名稱來減少字符串?
UDP:所有的
首先我刪除C++標籤 - 這個問題是有效的對C和C++的。所以我不認爲解釋類/函數/文件範圍中靜態方法的答案是相關的。
在回答之前閱讀文章。這些文章處理內存使用情況 - 實際數據存儲在哪裏(在.rodata或.data節中),字符串是否應該重新定位(如果我們談論的是unix/linux共享對象),是否可以更改字符串與否。
UDP2 在第一個它說,對於全局變量如下形式:
(1) const char *a = "...";
比
(2) const char a[] = "..."
爲什麼那麼好?我一直認爲(1)更好,因爲(2)實際上覆制了我們賦值的字符串,而(1)只指向我們賦值的字符串。
你可以聲明爲爲const char * X = 「布拉布拉」;它看起來更漂亮:) – 2009-11-20 08:48:08
這是我也認爲正確的解決方案,但已經在「第一」Ulrich批評它 – dimba 2009-11-20 08:58:41
「首先,我刪除了C++標籤 - 這個問題是有效的C以及C + +」哼。你的意思是它是「*不適用於C++」嗎?否則,你爲什麼刪除標籤?請注意,C++的答案會有所不同 - 默認情況下,C++將爲const數組提供內部鏈接。 – 2009-11-20 15:20:26