最終更新日時: 2025年08月11日 20時41分08秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<spanstream>

# std::basic_ispanstream::span(C++23)

    std::span<const charT> span() const noexcept; // (1)

    void span(std::span<charT> s) noexcept;       // (2)

    template<class ROS>
    void span(ROS&& s) noexcept;                  // (3)

## 概要

固定長バッファの取得または設定をする。

- (1) : `std::span` 型の固定長バッファを取得する
- (2) : `std::span` 型の固定長バッファ `s` を設定する
- (3) : `s` から `std::span` 型の固定長バッファを作成し、それを設定する

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

- (3) : `ROS` が `ranges::borrowed_range` の要求を満たすこと (`(!convertible_to<ROS, std::span<charT>>) && convertible_to<ROS, std::span<const charT>>`が`true`であること)。

## 効果

- (1) : `return rdbuf()->span();` と同等
- (2) : `rdbuf()->span(s)` と同等
- (3) : `std::span<const charT>(std::forward<ROS>(s))` を `sp` とした時、`this->span(std::span<charT>(const_cast<charT*>(sp.data()), sp.size()))` と同等

## 例

    #include <array>
    #include <iostream>
    #include <span>
    #include <spanstream>

    int main()
    {
      char buf1[32] = "default";
      std::span<char> span1{buf1};
      std::ispanstream iss{span1};

      // (1)
      std::span<const char> read = iss.span();

      std::cout << "(1)" << std::endl;
      std::cout << read.data() << std::endl;
      std::cout << std::endl;

      char buf2[32] = "overwritten";
      std::span<char> span2{buf2};

      // (2)
      iss.span(span2);

      std::cout << "(2)" << std::endl;
      std::cout << iss.span().data() << std::endl;
      std::cout << std::endl;

      std::array<char, 5> buf3 = {'l', 'a', 's', 't', '\0'};

      // (3)
      iss.span(buf3);

      std::cout << "(3)" << std::endl;
      std::cout << iss.span().data() << std::endl;
    }

### 出力

    (1)
    default

    (2)
    overwritten

    (3)
    last

## バージョン

### 言語

- C++23

### 処理系

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

## 関連項目

- `basic_spanbuf::span`