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 . |
begin C++20 |
nullptr 을(를) 반환합니다. |
end C++20 |
nullptr 을(를) 반환합니다. |
size C++20 |
0을 반환합니다. |
에서 상속됨 view_interface |
설명 |
back C++20 |
정의되지 않은 동작이 발생합니다. |
data C++20 |
nullptr 을(를) 반환합니다. |
empty C++20 |
true 을(를) 반환합니다. |
front C++20 |
정의되지 않은 동작이 발생합니다. |
operator[] C++20 |
정의되지 않은 동작이 발생합니다. |
operator bool C++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
.