Namespaces
Variants

비전파 캐시 (C++20)

cppreference.net에서 가져옴
 
 
Ranges 라이브러리
Range 어댑터
 
template< class T >
    requires std::is_object_v<T>
class /*non-propagating-cache*/;
(C++20부터)
(설명 전용*)

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

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

  • 복사 생성되거나 할당될 때 원본의 값을 복사하지 않으며,
  • 이동될 때 원본의 값을 재설정하고,
  • 할당을 받을 때 자신의 값을 재설정하며,
  • input view가 반복될 때 일시적으로 값을 캐시할 수 있도록 멤버 함수 템플릿을 추가로 제공합니다.

이 래퍼는 값을 포함하는 캐시를 캡슐화합니다. 캐시 지우기는 포함된 값을 재설정하는 것과 동등한 연산입니다. 이러한 연산은 래퍼를 복사하거나 이동할 때 수행됩니다.

참고 항목

템플릿 매개변수

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 객체)