Поиск…
Вступление
Ключевое слово decltype
может использоваться для получения типа переменной, функции или выражения.
Основной пример
Этот пример просто иллюстрирует, как можно использовать это ключевое слово.
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'
Если, например, кто-то изменяет тип 'a':
float a=99.0f;
Тогда тип переменной b
теперь автоматически становится float
.
Другой пример
Скажем, у нас есть вектор:
std::vector<int> intVector;
И мы хотим объявить итератор для этого вектора. Очевидная идея - использовать auto
. Однако может потребоваться просто объявить переменную итератора (и не назначать ее чему-либо). Мы бы сделали:
vector<int>::iterator iter;
Тем не менее, с помощью decltype
становится легче и меньше подвержено ошибкам (если изменяется тип intVector
).
decltype(intVector)::iterator iter;
В качестве альтернативы:
decltype(intVector.begin()) iter;
Во втором примере возвращаемый тип begin
используется для определения фактического типа, который является vector<int>::iterator
.
Если нам нужен const_iterator, нам просто нужно использовать cbegin
:
decltype(intVector.cbegin()) iter; // vector<int>::const_iterator