Spec-Zone.ru › C++

std::in_range

Defined in header <utility>
template< class R, class T >
constexpr bool in_range( T t ) noexcept;
(since C++20)

Возвращает true , если значение t находится в диапазоне значений, которые могут быть представлены в R, то есть, если t может быть преобразовано в R сохраняя значение.

Ошибка компиляции возникает, если T или U являются не целыми типами, типом символа или bool.

Параметры

t - значение для проверки

Возвращаемое значение

true , если значение t может быть представлено в R, false в противном случае.

Возможная реализация

template<class R, class T>
constexpr bool in_range(T t) noexcept
{
    return std::cmp_greater_equal(t, std::numeric_limits<R>::min()) &&
        std::cmp_less_equal(t, std::numeric_limits<R>::max());
}

Примечания

Эта функция не может быть использована с перечислениями (enums), включая std::byte, char, char8_t, char16_t, char32_t, wchar_t и bool.

Тест на наличие функции макрос Значение Стандарт Функция
__cpp_lib_integer_comparison_functions 202002L (C++20) Функции сравнения целых чисел

Пример

#include <iostream>
#include <utility>
 
int main()
{
    std::cout << std::boolalpha;
 
    std::cout << std::in_range<std::size_t>(-1) << '\n';
    std::cout << std::in_range<std::size_t>(42) << '\n';
}

Вывод:

false
true

См. также

ranges::min
(C++20)
возвращает меньшее из заданных значений
(niebloid)
ranges::max
(C++20)
возвращает большее из заданных значений
(niebloid)
ranges::clamp
(C++20)
ограничивает значение парой граничных значений
(niebloid)
lerp
(C++20)
функция линейной интерполяции
(функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/utility/in_range

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API