Namespaces
Variants

std::ranges::cdata

출처: ko.cppreference.net
 
 
범위 라이브러리
범위 어댑터
 
헤더에 정의됨 <ranges>
헤더에 정의됨 <iterator>
inline namespace /*unspecified*/ {
    inline constexpr /*unspecified*/ cdata = /*unspecified*/;
}
(C++20부터)
(커스터마이제이션 포인트 객체)
호출 시그니처
template< class T >
    requires /* see below */
constexpr /* see below */ cdata( T&& t );
(C++20부터)

연속 범위의 첫 번째 요소에 대한 포인터를 반환합니다. 상수 타입의(C++23부터) (C++20까지는) const 한정(C++23까지) 인자로 지정된.

CT을 다음과 같이 정의합니다:

  • const std::remove_reference_t<T>& 인자가 lvalue인 경우 (즉, T이 lvalue 참조 타입인 경우),
  • const T 그렇지 않으면.

ranges::cdata에 대한 호출은 표현식 동등합니다 ranges::data(static_cast<CT&&>(t)).

반환 타입은 std::remove_reference_t<ranges::range_reference_t<CT>>*와 동등합니다.

(C++23까지)

인자가 lvalue이거나 ranges::enable_borrowed_range<std::remove_cv_t<T>>가 true인 경우, ranges::cdata에 대한 호출은 표현식 동등합니다:

반환 타입은 std::remove_reference_t<ranges::range_const_reference_t<T>>*와 동등합니다.

그 외 모든 경우, ranges::cdata에 대한 호출은 잘못된 형식이며, 템플릿 인스턴스화의 즉시 문맥에서 호출이 나타날 때 대체 실패를 초래할 수 있습니다.

(C++23부터)

ranges::cdata(t)이 유효하면, 상수 타입의(C++23부터) 객체에 대한 포인터를 반환합니다.

커스터마이제이션 포인트 객체

ranges::cdata 이름은 커스터마이제이션 포인트 객체 를 나타내며, 이는 함수 객체 의 const 리터럴 semiregular 클래스 타입입니다. 자세한 내용은 CustomizationPointObject 를 참조하십시오.

예제

#include <cstring>
#include <iostream>
#include <ranges>
#include <string>
int main()
{
    std::string src {"hello world!\n"};
//  std::ranges::cdata(src)[0] = 'H'; // 오류, src.data()는 읽기 전용으로 처리됨
    std::ranges::data(src)[0] = 'H'; // 정상, src.data()는 비상수 저장소임
    char dst[20]; // C 스타일 문자열을 위한 저장소
    std::strcpy(dst, std::ranges::cdata(src));
    // [data(src), data(src) + size(src)]는 NTBS임이 보장됨
    std::cout << dst;
}

출력:

Hello world!

참고 항목

연속 범위의 시작 부분에 대한 포인터를 획득
(커스터마이제이션 포인트 객체)
(C++17)
기반 배열에 대한 포인터를 획득
(함수 템플릿)