2014-05-12 11 views
8

Zwykle widziałem kod, który zadeklarować stałe właśnie tak:Czy istnieje jakaś różnica między "statyczną konstelacją NSInteger" i "statyczną const NSInteger"?

static const NSInteger kNum = 1; 
static NSString * const kStr = @"A"; 

wiem dlaczego const powinno być napisane za NSString *, ale nie jestem pewien, czy static NSInteger const kNum = 1; i static const NSInteger kNum = 1; są takie same.

Czy jest jakaś różnica między static NSInteger const a static const NSInteger?

Odpowiedz

18

Są takie same. Typ stały można "wyprowadzić" z danego typu, pisząc jeden z następujących: Kolejność nie ma w tym przypadku znaczenia.

te są zmienne wskaźniki do ciągłego danych:

type const* var 
const type* var 

co oznacza, że ​​wskaźnik może być zmieniony, ale dane nie mogą (chyba, że ​​to cast). Możesz przeczytać od prawej do lewej jako "wskaźnik do stałej typu".

To jest stałym wskaźnikiem do zmiennej danych:

type* const var 

Uwaga wiązania.

Oznacza to, że nie można wskazać wskaźnika w innym miejscu, ale można zmienić dane. Możesz przeczytać od prawej do lewej jako "stały wskaźnik do typu".

będzie dziwić, że zarabianie zarówno wskaźnik i stałej danych można zrobić tak:

type const* const var 
const type* const var 
Powiązane problemy