11

我很好的典型範例精通常數:聲明並初始化在頭文件

//.h 
extern const int myInt; 

//.c, .m, .cpp, what have you 
const int myInt = 55; 

但一定是給它放入.h文件與庫或其他情況下,您使用的方式無法訪問實施文件。

例如,我想一個NSString不斷在Xcode項目添加到.h文件像這樣:

static NSString *const myString = @"my_string"; 

然而,當我嘗試使用myString,我得到的錯誤

初始化器元件是不是編譯時間上myString常數

,表明它沒有正確實例化。如何在C++或Objecitve-C頭文件中聲明編譯時常量?

+0

那麼這是否意味着C或C++?您可以使用C++中的運行時表達式初始化全局變量,但不能使用C語言。 –

+0

要知道C不可能。將更新標記。 –

回答

17

在C++中,const物體具有內部鏈接除非明確聲明extern,所以沒有問題,把一個定義成一個標題文件,例如:

const int myInt = 55; 

利用這個定義與第一聲明,myInt可以是用作整數常量表達式,例如數組邊界等。

我不能爲客觀C回答。

+0

這對C++和Objective-C都有效,謝謝! –

+0

@Vorac:這在g ++中起作用(假設你實際正在編譯C++源代碼)。你的編輯讓我浪費時間重新驗證一些已經是正確的東西,並使得這個答案在內部不一致。爲什麼我會說「const對象有內部鏈接」,然後對這個例子使用一個_explicit_'static'?如果你不確定什麼,然後評論;不要編輯。我已經回滾你的編輯。 –