Namespaces
Variants

std::ranges::view_interface<D>::data

cppreference.net에서
 
 
Ranges 라이브러리
범위 어댑터
 
 
constexpr auto data()
    requires std::contiguous_iterator<ranges::iterator_t<D>>;
(1) (C++20부터)
constexpr auto data() const
    requires ranges::range<const D> && 
        std::contiguous_iterator<ranges::iterator_t<const D>>;
(2) (C++20부터)

data() 멤버 함수의 기본 구현은 std::to_address를 통해 시작 반복자가 가리키는 주소를 얻습니다. 이는 뷰가 비어 있지 않을 때 파생된 타입의 뷰가 참조하는 연속 저장 공간의 가장 낮은 주소이기도 합니다 (contiguous_iterator에 의해 암시됨).

1) [를] derived[라] static_cast<D&>(*this)둡니다. return std::to_address(ranges::begin(derived));과 동일합니다.
2)[는] (1)과 동일하지만, derived[가] static_cast<const D&>(*this)인 점이 다릅니다.

반환값

시작 반복자가 가리키는 주소.

참고 사항

다음 파생 타입들은 data() 의 기본 구현을 사용할 수 있습니다:

다음 타입들은 std::ranges::view_interface 에서 파생되었으며 자체적인 data() 멤버 함수를 선언하지 않지만, 해당 반복자 타입이 contiguous_iterator 를 만족하지 않기 때문에 기본 구현을 사용할 수 없습니다:

**참고:** 원본 텍스트에 번역이 필요한 한국어 텍스트가 포함되어 있지 않으며, 모든 내용이 C++ 관련 용어와 HTML 태그로 구성되어 있습니다. 지시사항에 따라 HTML 태그, 속성, C++ 특정 용어는 번역하지 않고 그대로 유지했습니다.

예제

#include <array>
#include <iostream>
#include <ranges>
#include <string_view>
int main() {
    constexpr std::string_view str { "Hello, C++20!" };
    std::cout << (str | std::views::drop(7)).data() << '\n';
    constexpr static std::array a { 1,2,3,4,5 };
    constexpr auto v { a | std::views::take(3) };
    static_assert( &a[0] == v.data() );
}

출력:

C++20!

참고 항목

(C++17)
기본 배열에 대한 포인터를 얻음
(함수 템플릿)
연속 범위의 시작 부분에 대한 포인터를 얻음
(커스터마이제이션 포인트 객체)
읽기 전용 연속 범위의 시작 부분에 대한 포인터를 얻음
(커스터마이제이션 포인트 객체)
(C++20)
포인터와 유사한 타입으로부터 원시 포인터를 얻음
(함수 템플릿)