名前空間
変種
操作

std::ranges::dangling

From cppreference.com
< cpp‎ | ranges
 
 
Rangesライブラリ
Rangeアダプタ
 
ヘッダ <ranges> で定義
struct dangling;
(C++20以降)

dangling はプレースホルダー型であり、空のクラス型です。これは、テンプレートエイリアスである ranges::borrowed_iterator_t および ranges::borrowed_subrange_t と共に使用されます。

通常、range のイテレータまたはサブレンジを返す 制約付きアルゴリズム のいくつかで、borrowed_range をモデル化しない特定の一時的な range 引数を受け取った場合、ダングリング結果を返すのを避けるために、代わりに dangling が返されます。

目次

[編集] メンバ関数

std::ranges::dangling::dangling

constexpr dangling() noexcept = default;
(1)
template<class... Args>
constexpr dangling(Args&&...) noexcept { }
(2)
1) dangling は自明にデフォルト構築可能です。
2) dangling は、任意の数および任意の非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'; // compilation error: no match for 'operator*'
                                         // (operand type is '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 models 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 型を取得する
(エイリアステンプレート)[編集]
型がrangeであり、その式のインスタンスから取得したイテレータがダングリングの危険なく安全に返されることを規定する
(コンセプト) [編集]
English 日本語 中文(简体) 中文(繁體)