Sök…
Introduktion
Nyckelordet decltype
kan användas för att få typen av en variabel, funktion eller ett uttryck.
Grundläggande exempel
Detta exempel illustrerar bara hur detta sökord kan användas.
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'
Om till exempel någon ändrar, skriv 'a' till:
float a=99.0f;
Sedan blir typen av variabel b
automatiskt float
.
Ett annat exempel
Låt oss säga att vi har vektor:
std::vector<int> intVector;
Och vi vill förklara en iterator för denna vektor. En uppenbar idé är att använda auto
. Det kan dock behövas bara förklara en iteratorvariabel (och inte tilldela den till någonting). Vi skulle göra:
vector<int>::iterator iter;
Men med decltype
blir det enkelt och mindre fel benägna (om typen av intVector
ändras).
decltype(intVector)::iterator iter;
Alternativt:
decltype(intVector.begin()) iter;
I det andra exemplet används returtypen för begin
för att bestämma den verkliga typen, som är vector<int>::iterator
.
Om vi behöver en const_iterator, behöver vi bara använda cbegin
:
decltype(intVector.cbegin()) iter; // vector<int>::const_iterator