al valore di inizializzare un oggetto di tipo T
, si potrebbe fare qualcosa sulla falsariga di uno dei seguenti:esplicita Tipo conversione e Multiple Specifiers Tipo semplici
T x = T();
T x((T()));
La mia domanda riguarda tipi specificati da una combinazione di semplice specificatori di tipo, ad esempio, unsigned int
:
unsigned int x = unsigned int();
unsigned int x((unsigned int()));
Visual C++ 2008 e Intel C++ Compiler 11.1 accettare sia di questi senza avvertimenti; Comeau 4.3.10.1b2 e g ++ 3.4.5 (che è, certamente, non particolarmente recente) no.
Secondo lo standard C++ (C++ 03 5.2.3/2, expr.type.conv):
L'espressione
T()
, doveT
è un semplice tipo-specificatore (7.1.5.2) per un non-array tipo di oggetto completa o la (possibilmente cv-qualificato)void
tipo, crea un rvalue del tipo specificato, che è di valore inizializzato
7.1.5.2 dice "semplici specificatori tipo sono , "e segue con un elenco che include unsigned
e int
.
Pertanto, dato che in 5.2.3/2, "semplice-type-specifier" è singolare, e unsigned
e int
sono due identificatori di tipo, sono gli esempi di cui sopra che l'uso unsigned int
valido? (e, se è così, il follow-up è, non è corretto per Microsoft e Intel supportare tali espressioni?)
Questa domanda è più per curiosità che altro; per tutti i tipi specificati da una combinazione di più specificatori di tipo semplice, l'inizializzazione del valore equivale all'inizializzazione zero. (Questa domanda è stata richiesta da comments in response to this answer to a question about initialization).
Come osi interrogarmi. : 3 Penso che l'espressione '(unsigned int)' nomini un tipo, comunque. – GManNickG
@GMan: '(unsigned int)()' fallisce con gcc 3 e 4 e anche con VC8. 'Naturalmente funzionano le versioni typedef. –
H m. :( – GManNickG