РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
721 of 815 menu

Класс decay

Класс decay из заголовочного файла <type_traits> выполняет приведение типа, аналогичное неявному преобразованию при передаче аргумента в функцию по значению. Он удаляет ссылки, удаляет cv-квалификаторы (const и volatile), а также преобразует типы массивов в указатели, а типы функций - в указатели на функции. Класс имеет единственный параметр шаблона - тип, который нужно преобразовать.

Синтаксис

template <class T> struct decay;

Пример

Давайте применим decay к ссылочному типу и посмотрим, как изменится тип:

#include <iostream> #include <type_traits> using namespace std; int main() { using T1 = decay<int&>::type; using T2 = decay<const int&>::type; cout << is_same<T1, int>::value << endl; cout << is_same<T2, int>::value << endl; return 0; }

Результат выполнения кода:

1 1

Пример

Давайте применим decay к массиву и функции:

#include <iostream> #include <type_traits> using namespace std; int foo(int); int main() { using T1 = decay<int[5]>::type; using T2 = decay<int(int)>::type; cout << is_same<T1, int*>::value << endl; cout << is_same<T2, int(*)(int)>::value << endl; return 0; }

Результат выполнения кода:

1 1

Пример

Давайте используем decay вместе с decay_t для упрощения записи:

#include <iostream> #include <type_traits> using namespace std; int main() { decay_t<const int&> x = 42; decay_t<int[3]> y = nullptr; cout << x << endl; cout << (y == nullptr) << endl; return 0; }

Результат выполнения кода:

42 1

Смотрите также

  • класс remove_reference,
    который удаляет ссылку из типа
  • класс is_same,
    который проверяет совпадение типов
  • класс enable_if,
    который условно включает шаблон
  • класс conditional,
    который выбирает тип по условию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить