最終更新日時: 2026年07月22日 16時08分23秒 (JST)
rotarymars が更新

履歴 編集

<string_view>

# std::basic_string_view::推論補助(C++20)

    namespace std {
      template <class It, class End>
      basic_string_view(It, End)
        -> basic_string_view<iter_value_t<It>>;          // (1) C++20

      template<class R>
      basic_string_view(R&&)
        -> basic_string_view<ranges::range_value_t<R>>;  // (2) C++23
    }

## 概要

`std::basic_string_view`クラステンプレートの型推論補助。イテレータ範囲やレンジから推論する。

## テンプレートパラメータ制約

- (1) :
  - `It`は`contiguous_iterator`の要件を満たすこと
  - `End`は`sized_sentinel_for<It>`の要件を満たすこと
- (2) :
  - `R`は`ranges::contiguous_range`の要件を満たすこと

## 例

    #include <iostream>
    #include <string_view>
    #include <string>

    int main()
    {
      std::string s = "Hello";
      std::basic_string_view sv{s.begin(), s.end()};
      std::cout << sv << std::endl;
    }

### 出力

    Hello

## バージョン

### 言語

- C++20

### 処理系

- Clang:
- GCC: 10.1 ✅
- Visual C++: ??

## 関連項目

- C++17 クラステンプレートのテンプレート引数推論

## 参照

- P1391R4 Range constructor for `std::string_view`
- P1989R2 Range constructor for `std::string_view` 2: Constrain Harder
  - C++23での、レンジ版推論補助追加