std::ranges:: dangling
|
||||||||||||||||||||||
| Range primitives | |||||||
|
|||||||
| Range concepts | |||||||||||||||||||
|
|||||||||||||||||||
| Range factories | |||||||||
|
|||||||||
| Range adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||
| Helper items | |||||||||||||||||
|
|
||||||||||||||||
|
헤더 파일에 정의됨
<ranges>
|
||
|
struct
dangling
;
|
(C++20부터) | |
dangling
는 플레이스홀더 타입이자 빈 클래스 타입으로, 템플릿 별칭
ranges::borrowed_iterator_t
및
ranges::borrowed_subrange_t
와 함께 사용됩니다.
특정
constrained algorithms
가 일반적으로
range
의 iterator나 subrange를 반환할 때,
borrowed_range
를 모델링하지 않는 rvalue
range
인자를 받는 경우, 잠재적으로 dangling될 수 있는 결과를 반환하는 것을 피하기 위해
dangling
이 대신 반환됩니다.
목차 |
멤버 함수
std::ranges::dangling:: dangling
|
constexpr
dangling
(
)
noexcept
=
default
;
|
(1) | |
|
template
<
class
...
Args
>
constexpr dangling ( Args && ... ) noexcept { } |
(2) | |
dangling
은 사소하게 기본 생성 가능합니다.
dangling
은 임의의 개수와 임의의 non-void 타입 인수들로부터 생성될 수 있습니다. 이 생성 작업 자체는 어떠한 부수 효과도 가지지 않습니다.
다시 말해, 올바른 형태의 비집계 초기화에서 타입(예: 반복자 타입)을
dangling
으로 대체한 후에도, 결과적인 초기화는 여전히 올바른 형태를 유지합니다.
예제
#include <algorithm> #include <array> #include <iostream> #include <ranges> #include <type_traits> #include <string_view> int main() { auto get_array_by_value = [] { return std::array{0, 1, 0, 1}; }; auto dangling_iter = std::ranges::max_element(get_array_by_value()); static_assert(std::is_same_v<std::ranges::dangling, decltype(dangling_iter)>); // std::cout << *dangling_iter << '\n'; // 컴파일 오류: 'operator*'에 대한 일치 없음 // (피연산자 타입은 'std::ranges::dangling') auto get_persistent_array = []() -> const std::array<int, 4>& { static constexpr std::array a{0, 1, 0, 1}; return a; }; auto valid_iter = std::ranges::max_element(get_persistent_array()); static_assert(!std::is_same_v<std::ranges::dangling, decltype(valid_iter)>); std::cout << *valid_iter << ' '; // 1 auto get_string_view = [] { return std::string_view{"alpha"}; }; auto valid_iter2 = std::ranges::min_element(get_string_view()); // OK: std::basic_string_view는 borrowed_range를 모델링함 static_assert(!std::is_same_v<std::ranges::dangling, decltype(valid_iter2)>); std::cout << '\'' << *valid_iter2 << '\'' << '\n'; // 'a' }
출력:
1 'a'
참고 항목
borrowed_range
의 반복자 타입 또는
subrange
타입을 획득함
(alias template) |
|
|
(C++20)
|
해당 타입이
range
임을 명시하며, 이로부터 얻은 반복자들이 댕글링(dangling) 위험 없이 안전하게 반환될 수 있음을 보장함
(concept) |