Come faccio a valore-inizializzare un tipo * puntatore utilizzando il tipo() - come la sintassi?
Non è possibile. La sintassi T()
è definita in 5.2.3/1.2 (C++ 03, una dicitura leggermente diversa in FDIS C++ 11). In particolare, il secondo paragrafo afferma:
L'espressione T(), dove T è uno specificatore di tipo semplice (7.1.5.2) per un tipo di oggetto completo senza matrice o il vuoto (eventualmente qualificato per cv) digita, crea un valore rval del tipo specificato, che è inizializzato a valore (8.5);
Ciò significa che int()
, creerà un rvalue di tipo int e valore inizializzare esso. Ora il problema è che int*
non è un identificatore di tipo semplice, ma piuttosto un identificatore di tipo elaborato. La definizione di semplice tipo-specificatore nella grammatica è:
simple-type-specifier:
::opt nested-name-specifieropt type-name
::opt nested-name-specifier template template-id
char
wchar_t
bool
short
int
long
signed
unsigned
float
double
void
Con nome-tipo essendo definita come:
type-name:
class-name
enum-name
typedef-name
Questo è ciò che rende il lavoro proposto soluzioni. La creazione del typedef (direttamente o tramite il modello) crea un nome tipo (terzo tipo) che può essere utilizzato come identificatore del tipo semplice (primo tipo).
fonte
2011-11-09 16:35:33
Buona domanda. Si ottiene anche un errore simile per 'unsigned int'. –
Ora la domanda è perché vorresti farlo. Puoi inizializzare i puntatori con 0 direttamente (se sai che è un puntatore), e se questo è nascosto in qualche template, allora 'T()' funzionerà bene ... Non capisco come questa domanda abbia 11 upvotes:) –