Namespaces
Variants

std::data

cppreference.net에서
 
 
반복자 라이브러리
반복자 개념
반복자 기본 요소
알고리즘 개념 및 유틸리티
간접 호출 가능 개념
공통 알고리즘 요구사항
(C++20)
(C++20)
(C++20)
유틸리티
(C++20)
반복자 어댑터
범위 접근
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
헤더에 정의됨 <array>
헤더에 정의됨 <deque>
헤더에 정의됨 <flat_map>
 (C++23부터)
헤더에 정의됨 <flat_set>
 (C++23부터)
헤더에 정의됨 <forward_list>
헤더에 정의됨 <inplace_vector>
 (C++26부터)
헤더에 정의됨 <iterator>
헤더에 정의됨 <list>
헤더에 정의됨 <map>
헤더에 정의됨 <optional>
 (C++26부터)
헤더에 정의됨 <regex>
헤더에 정의됨 <set>
헤더에 정의됨 <span>
 (C++20부터)
헤더에 정의됨 <stacktrace>
 (C++23부터)
헤더에 정의됨 <string>
헤더에 정의됨 <string_view>
헤더에 정의됨 <unordered_map>
헤더에 정의됨 <unordered_set>
헤더에 정의됨 <valarray>
헤더에 정의됨 <vector>
template< class C >
constexpr auto data( C& c ) noexcept(noexcept(c.data()))
    -> decltype(c.data());
(1) (C++17부터)
template< class C >
constexpr auto data( const C& c ) noexcept(noexcept(c.data()))
    -> decltype(c.data());
(2) (C++17부터)
template< class T, std::size_t N >
constexpr T* data( T (&array)[N] ) noexcept;
(3) (C++17부터)

범위의 요소를 포함하는 메모리 블록에 대한 포인터를 반환합니다.

1,2) 반환 c.data().
3) 반환 array.

매개변수

c - data ( ) 멤버 함수를 가진 컨테이너 또는 뷰
array - 임의 타입의 배열
il - std::initializer_list

반환값

1,2) c. data ( )
3) array
4) il. begin ( )

예외

1) 구현에서 정의된 예외를 throw할 수 있습니다.

참고 사항

std::initializer_list 에 대한 오버로드는 data 멤버 함수를 가지고 있지 않기 때문에 필요합니다.

기능 테스트 매크로 값 표준 기능
__cpp_lib_nonmember_container_access 201411L (C++17) std::size() , std::data() , 및 std::empty()

가능한 구현

첫 번째 버전
template<class C>
constexpr auto data(C& c) -> decltype(c.data())
{
    return c.data();
}
두 번째 버전
template<class C>
constexpr auto data(const C& c) -> decltype(c.data())
{
    return c.data();
}
세 번째 버전
template<class T, std::size_t N>
constexpr T* data(T (&array)[N]) noexcept
{
    return array;
}
네 번째 버전
template<class E>
constexpr const E* data(std::initializer_list<E> il) noexcept
{
    return il.begin();
}

예제

#include <cstring>
#include <iostream>
#include <string>
int main()
{
    std::string s{"Hello world!\n"};
    char a[20]; // C-style 문자열을 위한 저장 공간
    std::strcpy(a, std::data(s));
//  [s.data(), s.data() + s.size()]는 C++11부터 NTBS임이 보장됨
    std::cout << a;
}

출력:

Hello world!

결함 보고서

다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
P3016R6 C++17 1) 비멤버 std::data 오버로드가 std::initializer_list
에 제공되었습니다. 2) std::data은 예외 명세를 전파해야 하는 요구 사항이 없었습니다.
1) 제거됨
2) 요구됨

참고 항목

연속 범위의 시작 부분에 대한 포인터를 획득
(customization point object)
읽기 전용 연속 범위의 시작 부분에 대한 포인터를 획득
(customization point object)