2014-05-12 15 views
8

Di solito, ho visto il codice che di dichiarare costanti era proprio come questo:C'è qualche differenza tra "statico NSInteger const" e "statico const NSInteger"?

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

so perché const dovrebbe essere scritto dietro NSString *, ma non sono sicuro se static NSInteger const kNum = 1; e static const NSInteger kNum = 1; sono gli stessi.

C'è qualche differenza tra static NSInteger const e static const NSInteger?

risposta

18

Sono uguali. Un tipo costante può essere "derivato" da un determinato tipo scrivendo uno di:

const type 
type const 

L'ordine non importa in questo caso.

Questi sono una variabile i puntatori ai dati costanti:

type const* var 
const type* var 

Il che significa che il puntatore può essere cambiato, ma i dati non può (a meno che la lanci). Puoi leggerlo da destra a sinistra come "puntatore a costante tipo".

Questo è un puntatore costante a dati variabili:

type* const var 

Nota la rilegatura.

Ciò significa che il puntatore non può essere fatto puntare altrove, ma è possibile modificare i dati. È possibile leggere da destra a sinistra come "puntatore costante a tipo".

Sarà una sorpresa che, per rendere sia il puntatore e la costante di dati può essere fatto in questo modo:

type const* const var 
const type* const var