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

Класс remove_reference

Класс remove_reference из заголовка type_traits удаляет ссылочный тип из переданного типа. Если переданный тип является ссылкой (<T&> или <T&&>), то результатом будет сам тип <T> без ссылки. Если же переданный тип не является ссылкой, то он возвращается без изменений. Внутри класса определен тип type, который и хранит результат преобразования. Также существует вспомогательный шаблон remove_reference_t, который сразу дает нужный тип без обращения к ::type.

Синтаксис

template <class T> struct remove_reference; template <class T> using remove_reference_t = typename remove_reference<T>::type;

Пример

Давайте удалим ссылку из типа <int&> и посмотрим на результат:

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

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

1 1 1

Пример

Давайте воспользуемся вспомогательным шаблоном remove_reference_t и выведем типы с его помощью:

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

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

1 1 1

Пример

Давайте применим remove_reference к указателю на ссылку и к другим типам:

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

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

1 1 1

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

  • класс decay,
    который удаляет ссылки и cv-квалификаторы
  • класс forward,
    который выполняет идеальную передачу
  • класс move,
    который приводит к rvalue-ссылке
  • класс is_same,
    который сравнивает два типа
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить