Szukaj…
Wprowadzenie
decltype
kluczowego decltype
można użyć do uzyskania typu zmiennej, funkcji lub wyrażenia.
Podstawowy przykład
Ten przykład pokazuje, jak można użyć tego słowa kluczowego.
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'
Jeśli na przykład ktoś się zmieni, wpisz „a”, aby:
float a=99.0f;
Następnie typ zmiennej b
automatycznie staje się float
.
Inny przykład
Powiedzmy, że mamy wektor:
std::vector<int> intVector;
I chcemy zadeklarować iterator dla tego wektora. Oczywistym pomysłem jest użycie auto
. Może być jednak konieczne po prostu zadeklarować zmienną iteratora (i nie przypisywać jej do niczego). Zrobilibyśmy:
vector<int>::iterator iter;
Jednak z decltype
staje się on łatwy i mniej podatny na błędy (jeśli zmienia się typ intVector
).
decltype(intVector)::iterator iter;
Alternatywnie:
decltype(intVector.begin()) iter;
W drugim przykładzie typ zwracanego begin
jest używany do określenia rzeczywistego typu, którym jest vector<int>::iterator
.
Jeśli potrzebujemy const_iterator, wystarczy użyć cbegin
:
decltype(intVector.cbegin()) iter; // vector<int>::const_iterator