Оператор decltype
Оператор decltype возвращает тип
выражения или переменной на этапе компиляции.
В качестве параметра оператор принимает
выражение или имя переменной, тип которого
необходимо определить. Результат работы
decltype можно использовать везде,
где требуется указать тип: при объявлении
переменных, в шаблонах, в возвращаемых
типах функций и так далее. В отличие от
auto, оператор decltype не
отбрасывает ссылки и квалификаторы
const.
Синтаксис
decltype(expression)
decltype(variable)
Пример
Давайте определим тип переменной a
и создадим новую переменную b
того же типа:
#include <iostream>
using namespace std;
int main()
{
int a = 5;
decltype(a) b = 10;
cout << a << " " << b << endl;
return 0;
}
Результат выполнения кода:
5 10
Пример
Давайте выведем тип выражения с помощью
decltype и typeid. Обратите
внимание, что decltype сохраняет
ссылки:
#include <iostream>
#include <typeinfo>
using namespace std;
int main()
{
int a = 5;
int& ref = a;
cout << typeid(decltype(a)).name() << endl;
cout << typeid(decltype(ref)).name() << endl;
cout << typeid(decltype(a + 1)).name() << endl;
return 0;
}
Результат выполнения кода:
"i"
"i"
"i"
Пример
Давайте используем decltype в
шаблонной функции, чтобы вывести тип
переданного аргумента:
#include <iostream>
using namespace std;
template <typename T>
void printType(T value)
{
decltype(value) copy = value;
cout << copy << endl;
}
int main()
{
printType(42);
printType(3.14);
return 0;
}
Результат выполнения кода:
42
3.14