Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::ranges::dangling

      From cppreference.com
      <cpp‎ |ranges
       
       
      Ranges library
      Range adaptors
       
      Defined in header<ranges>
      struct dangling;
      (since C++20)

      dangling is a placeholder type and an empty class type, used together with the template aliasesranges::borrowed_iterator_t andranges::borrowed_subrange_t.

      When someconstrained algorithms that usually return an iterator or a subrange of arange take a particular rvaluerange argument that does not modelborrowed_range,dangling will be returned instead to avoid returning potentially dangling results.

      Contents

      [edit]Member functions

      std::ranges::dangling::dangling

      constexpr dangling()noexcept=default;
      (1)
      template<class...Args>
      constexpr dangling(Args&&...)noexcept{}
      (2)
      1)dangling is trivially default constructible.
      2)dangling can be constructed from arguments of arbitrary number and arbitrary non-void type. The construction does not have any side-effect itself.

      In other words, after replacing the type (e.g. an iterator type) in a well-formed non-aggregate initialization withdangling, the resulting initialization is also well-formed.

      [edit]Example

      Run this code
      #include <algorithm>#include <array>#include <iostream>#include <ranges>#include <type_traits>#include <string_view> int main(){auto get_array_by_value=[]{returnstd::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'; // compilation error: no match for 'operator*'// (operand type is 'std::ranges::dangling') auto get_persistent_array=[]()->conststd::array<int,4>&{staticconstexprstd::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=[]{returnstd::string_view{"alpha"};};auto valid_iter2= std::ranges::min_element(get_string_view());// OK: std::basic_string_view models borrowed_range    static_assert(!std::is_same_v<std::ranges::dangling, decltype(valid_iter2)>);std::cout<<'\''<<*valid_iter2<<'\''<<'\n';// 'a'}

      Output:

      1 'a'

      [edit]See also

      obtains iterator type orsubrange type of aborrowed_range
      (alias template)[edit]
      specifies that a type is arange and iterators obtained from an expression of it can be safely returned without danger of dangling
      (concept)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/ranges/dangling&oldid=133771"

      [8]ページ先頭

      ©2009-2025 Movatter.jp