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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow