다음을 통해 공유


empty_view 클래스(C++ 표준 라이브러리)

요소가 없는 뷰입니다. 이 보기는 뷰와 함께 제공되어야 하지만 기본 데이터에 액세스할 필요가 없는 코드 호출과 같은 테스트 용도로 유용합니다.

구문

template<class T>
    requires std::is_object_v<T>
class empty_view : public ranges::view_interface<empty_view<T>>;

템플릿 매개 변수

T
요소의 형식입니다. 요소가 empty_view없더라도 모든 범위는 동질적입니다. 즉, 특정 형식의 요소가 있습니다. 따라서 요소가 없더라도 empty_view , 또는 strings등과 같은 형식이 empty_view int여전히 있습니다.

특성 보기

다음 항목에 대한 설명은 클래스 특성 보기를 참조 하세요.

특성 설명
범위 어댑터 views::empty
기본 범위 None
요소 형식 만들 때 empty_view 지정한 대로
반복기 범주 보기 contiguous_range
크기 예. 항상 0을 반환합니다.
반복 const가능
공통 범위
빌린 범위

멤버

멤버 함수 설명
생성자C++20 를 생성합니다 empty_view.
beginC++20 nullptr을(를) 반환합니다.
endC++20 nullptr을(를) 반환합니다.
sizeC++20 0을 반환합니다.
에서 상속됨 view_interface 설명
backC++20 정의되지 않은 동작이 발생합니다.
dataC++20 nullptr을(를) 반환합니다.
emptyC++20 true을(를) 반환합니다.
frontC++20 정의되지 않은 동작이 발생합니다.
operator[]C++20 정의되지 않은 동작이 발생합니다.
operator boolC++20 false을(를) 반환합니다.

설명

범위를 만드는 empty_view 가장 좋은 방법은 범위 어댑터를 사용하는 empty 것입니다. 범위 어댑터는 뷰 클래스를 만드는 데 사용되는 방법입니다. 사용자 고유의 사용자 지정 보기 형식을 만들려는 경우 보기 형식이 노출됩니다.

어떤 요소 empty_view도 있을 수 없으므로 특정 컴파일러 최적화가 가능합니다. 예를 들어 컴파일러는 반복할 것이 없다는 것을 알고 있으므로 제거 for (auto e : std::views::empty<int>) {...} 됩니다.

또 다른 용도 empty_view 로 구분 기호를 split_view empty_view 사용하여 분할하면 단일 요소 범위 범위가 생성됩니다.

요구 사항

헤더: <ranges> (C++20 이후)

네임스페이스: std::ranges

컴파일러 옵션: /std:c++20 이상이 필요합니다.

생성자

empty_view의 인스턴스를 만듭니다.

template<class T>
inline constexpr empty_view<T> empty{};

매개 변수

T
기본 요소의 형식이며, 그 중 아무 것도 없습니다.

설명

범위를 만드는 empty_view 가장 좋은 방법은 범위 어댑터를 사용하는 empty 것입니다.

본보기 empty_view

// requires /std:c++20 or higher
#include <ranges>
#include <iostream>

int main()
{
    auto anEmptyView = std::views::empty<int>;
    bool isNotEmpty = (bool)anEmptyView;
    std::cout << std::boolalpha << isNotEmpty << "\n"; // false
    std::cout << std::boolalpha << anEmptyView.empty(); // true
}
false
true

back

정의되지 않은 동작이 발생합니다.

constexpr auto back()
    requires ranges::bidirectional_range<T> && ranges::common_range<T>;

constexpr auto back() const
    requires ranges::bidirectional_range<const T> && ranges::common_range<const T>;

매개 변수

없음.

반환 값

없음.

설명

디버그 빌드에서 이 함수를 호출하면 함수가 빈 view_interface함수에서 호출되었다는 어설션이 발생합니다.

begin

뷰에 첫 번째 요소가 없으므로 반환 nullptr 합니다.

static constexpr T* begin() noexcept

반환 값

nullptr

data

뷰에 포인터를 가져올 첫 번째 요소가 없으므로 반환 nullptr 합니다.

static constexpr T* data() noexcept

반환 값

nullptr.

empty

파생 보기가 비어 있는지 테스트합니다.

static constexpr bool empty() noexcept

매개 변수

없음.

반환 값

true을(를) 반환합니다.

end

뷰에 요소가 없으므로 반환 nullptr 합니다.

static constexpr T* end() noexcept

반환 값

nullptr.

front

정의되지 않은 동작이 발생합니다.

constexpr auto front()
    requires ranges::forward_range<T>;
constexpr auto front() const
    requires ranges::forward_range<const T>;

매개 변수

없음.

반환 값

없음.

설명

디버그 빌드에서 이 함수를 호출하면 함수가 빈 view_interface함수에서 호출되었다는 어설션이 발생합니다.

operator[]

정의되지 않은 동작이 발생합니다.

template<ranges::random_access_range R = T>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos);

template<ranges::random_access_range R = const T>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos) const;

매개 변수

pos
반환할 요소의 시작 반복기를 기준으로 하는 위치입니다.

반환 값

없음.

설명

디버그 빌드에서 이 함수를 호출하면 인덱스가 범위를 view_interface벗어난 어설션이 발생합니다.

operator bool

파생 보기가 비어 있지 않은지 테스트합니다.

constexpr explicit operator bool()
requires requires { ranges::empty(T ()); };

constexpr explicit operator bool() const
requires requires { ranges::empty(T ()); };

매개 변수

없음.

반환 값

false을(를) 반환합니다.

본보기 (bool)

// requires /std:c++20 or higher
#include <ranges>
#include <iostream>

int main()
{
    auto anEmptyView = std::views::empty<int>;

    if (anEmptyView) // check if anEmptyView isn't empty
    {
        std::cout << "Error: why does an empty_view have elements?\n";
    }
    else
    {
        std::cout << "Correct: an empty_view is not not empty\n";
    }
}
Correct: an empty_view is not not empty

size

항상 0인 보기의 요소 수를 가져옵니다.

static constexpr size_t size()

매개 변수

없음.

반환 값

0.

참고 항목

<ranges>
empty 범위 어댑터
single_view
클래스 보기