Поиск…


Вступление

Ключевое слово 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


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow