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

Переменная is_same_v

Переменная is_same_v из заголовочного файла <type_traits> проверяет, совпадают ли два типа. В первый параметр мы передаем первый тип для сравнения, а во второй - второй тип. Результатом является значение типа bool: true, если типы одинаковые, и false, если разные.

Переменная is_same_v является сокращенной формой для is_same<T, U>::value. Она удобна тем, что не требует писать ::value и позволяет использовать результат напрямую в условиях if constexpr, static_assert и других конструкциях.

Синтаксис

is_same_v<T, U>

Пример

Давайте сравним два одинаковых типа int и int:

#include <iostream> #include <type_traits> using namespace std; int main() { cout << is_same_v<int, int> << endl; return 0; }

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

1

Пример

А теперь сравним два разных типа int и double:

#include <iostream> #include <type_traits> using namespace std; int main() { cout << is_same_v<int, double> << endl; return 0; }

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

0

Пример

Переменная is_same_v часто используется в if constexpr для выбора поведения в зависимости от типа. Давайте напишем функцию, которая по-разному работает с int и другими типами:

#include <iostream> #include <type_traits> using namespace std; template <typename T> void check(T value) { if constexpr (is_same_v<T, int>) { cout << "int: " << value << endl; } else { cout << "other: " << value << endl; } } int main() { check(123); check(1.5); return 0; }

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

"int: 123" "other: 1.5"

Пример

Также is_same_v удобно применять в static_assert для проверки типов на этапе компиляции:

#include <iostream> #include <type_traits> using namespace std; template <typename T> T add(T a, T b) { static_assert(is_same_v<T, T>, "types must match"); return a + b; } int main() { cout << add(1, 2) << endl; cout << add(1.5, 2.5) << endl; return 0; }

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

3 4

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

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