Namespaces
Variants

Non-propagating cache (C++20)

From cppreference.net
Ranges library
Range adaptors
Helper items
(until C++23) (C++23)
non-propagating-cache


template < class T >

requires std:: is_object_v < T >

class /*non-propagating-cache*/ ;
(C++20부터)
( 설명 전용* )

일부 범위 어댑터들, 예를 들어 ranges::join_view ranges::lazy_split_view 는 설명 전용( exposition-only ) 클래스 템플릿 non-propagating-cache 로 지정된 값(예: 반복자)을 조건부로 저장합니다.

이 래퍼는 다음과 같은 점을 제외하면 std:: optional < T > 와 완전히 동일하게 동작합니다:

  • 복사 생성되거나 할당될 때 소스의 값을 복사하지 않으며,
  • 이동된 후에는 소스의 값을 재설정하고,
  • 할당받을 때 자신의 값을 재설정하며,
  • 반복되는 동안 입력 뷰가 값을 임시로 캐시할 수 있도록 멤버 함수 템플릿을 추가로 제공합니다.

래퍼는 값을 포함하는 캐시를 캡슐화합니다. 캐시 클리어는 포함된 값을 리셋하는 것과 동등한 연산입니다. 이러한 연산은 래퍼를 복사하거나 이동할 때 수행됩니다.

목차

템플릿 매개변수

T - 포함된 값의 타입, 반드시 객체 타입이어야 함

멤버 함수

복사 및 이동 생성자

constexpr /*non-propagating-cache*/
( const /*non-propagating-cache*/ & ) noexcept { }
(1) (since C++20)
constexpr /*non-propagating-cache*/
( /*non-propagating-cache*/ && other ) noexcept { other. reset ( ) ; }
(2) (since C++20)
1) 복사 생성자는 아무런 효과가 없습니다.
2) 이동 생성자는 other 의 캐시를 지웁니다.

복사 및 이동 할당 연산자

constexpr /*non-propagating-cache*/ &

operator = ( const /*non-propagating-cache*/ & other ) noexcept
{
if ( std:: addressof ( other ) ! = this )
reset ( ) ;
return * this ;

}
(1) (since C++20)
constexpr /*non-propagating-cache*/ &

operator = ( /*non-propagating-cache*/ && other ) noexcept
{
reset ( ) ;
other. reset ( ) ;
return * this ;

}
(2) (since C++20)
1) 복사 할당 연산자는 * this 의 캐시를 지웁니다.
2) 이동 할당 연산자는 * this other 의 캐시를 모두 지웁니다.

non-propagating-cache <T>:: emplace-deref

template < class I >
constexpr T & /*emplace-deref*/ ( const I & i ) ;
(C++20 이후)
( 설명 전용* )

포함된 값을 직접 초기화 로 (단, 직접 목록 초기화는 제외) * i 로 초기화합니다. 호출 전에 * this 가 이미 값을 포함하고 있다면, reset ( ) 이 호출됩니다.

새로운 포함된 값에 대한 참조를 반환합니다.

어떤 가상 변수 t 에 대해 선언 T t ( * i ) ; 이 올바른 형식이 아닌 경우 프로그램의 형식이 잘못되었습니다. * i 가 가능한 cv-한정된 T 의 prvalue인 경우, 이동 가능할 필요는 없습니다.

std::optional과 동일한 멤버

멤버 함수

optional 객체를 생성함
( std::optional<T> 의 public 멤버 함수)
포함된 값이 있는 경우 이를 파괴함
( std::optional<T> 의 public 멤버 함수)
내용을 할당함
( std::optional<T> 의 public 멤버 함수)
관찰자
포함된 값에 접근함
( std::optional<T> 의 public 멤버 함수)
객체가 값을 포함하는지 확인함
( std::optional<T> 의 public 멤버 함수)
수정자
포함된 값을 파괴함
( std::optional<T> 의 public 멤버 함수)
포함된 값을 제자리에서 생성함
( std::optional<T> 의 public 멤버 함수)

참고 사항

non-propagating-cache 는 구현에서 begin ( ) 의 결과를 캐싱하기 위해 사용되며, 이 메서드의 분할 상환된 상수 시간 복잡도를 제공합니다.

참고 항목

view range s 를 평탄화하여 얻은 시퀀스로 구성된 view
(클래스 템플릿) (range adaptor 객체)
범위들의 view를 평탄화하여 얻은 시퀀스로 구성된 view (요소 사이에 구분자 포함)
(클래스 템플릿) (range adaptor 객체)
구분자를 사용하여 다른 view 를 분할하여 얻은 하위 범위들에 대한 view
(클래스 템플릿) (range adaptor 객체)
구분자를 사용하여 다른 view 를 분할하여 얻은 하위 범위들에 대한 view
(클래스 템플릿) (range adaptor 객체)
다른 view 의 요소들을 N 크기의 겹치지 않는 연속적인 청크로 구성된 view s 의 범위
(클래스 템플릿) (range adaptor 객체)