Ricerca…
introduzione
La parola chiave decltype può essere utilizzata per ottenere il tipo di una variabile, una funzione o un'espressione.
Esempio di base
Questo esempio illustra come è possibile utilizzare questa parola chiave.
int a = 10;
// Assume that type of variable 'a' is not known here, or it may
// be changed by programmer (from int to long long, for example).
// Hence we declare another variable, 'b' of the same type using
// decltype keyword.
decltype(a) b; // 'decltype(a)' evaluates to 'int'
Se, ad esempio, qualcuno cambia, digita "a" per:
float a=99.0f;
Quindi il tipo di variabile b ora diventa automaticamente float .
Un altro esempio
Diciamo che abbiamo il vettore:
std::vector<int> intVector;
E vogliamo dichiarare un iteratore per questo vettore. Un'idea ovvia è usare l' auto . Tuttavia, potrebbe essere necessario semplicemente dichiarare una variabile iteratore (e non assegnarla a qualcosa). Vorremmo fare:
vector<int>::iterator iter;
Tuttavia, con decltype diventa facile e meno soggetto a errori (se il tipo di intVector cambia).
decltype(intVector)::iterator iter;
In alternativa:
decltype(intVector.begin()) iter;
Nel secondo esempio, il tipo di ritorno di begin viene utilizzato per determinare il tipo effettivo, che è vector<int>::iterator .
Se abbiamo bisogno di un const_iterator, abbiamo solo bisogno di usare cbegin :
decltype(intVector.cbegin()) iter; // vector<int>::const_iterator