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

履歴 編集

function
<spanstream>

# std::basic_ospanstream::コンストラクタ(C++23)

    explicit basic_ospanstream(std::span<charT> s,
      ios_base::openmode which = ios_base::out);          // (1)

    basic_ospanstream(const basic_ospanstream&) = delete; // (2)

    basic_ospanstream(basic_ospanstream&& rhs);           // (3)

## 概要

`basic_ospanstream`オブジェクトを構築する。

- (1) : 入力データとして`std::span`オブジェクト、およびモードを指定して構築する
- (2) : （削除）コピーコンストラクタ
- (3) : ムーブコンストラクタ

## 効果

- (1) : 内部で保持している `basic_spanbuf<charT, traits>` 型の固定長バッファを `sb` とすると、ベースクラスを `basic_ostream<charT, traits>(addressof(sb))` で構築し、さらに `sb` を `basic_spanbuf<charT, traits>(s, which | ios_base::out)` で初期化する
- (2) : （削除）
- (3) : 内部で保持している `basic_spanbuf<charT, traits>` 型の固定長バッファを `sb` とすると、ベースクラスを `std::move(rhs)` で構築し、さらに `sb` を `std::move(rhs.sb)` で初期化する。続いて、`basic_ostream<charT, traits>::set_rdbuf(addressof(sb))` を呼び、`basic_spanbuf` を設定する。

## 例

    #include <iostream>
    #include <span>
    #include <spanstream>
    #include <utility>

    int main()
    {
      char buf[32] = "hello";
      std::span<char> span{buf};

      // (1) std::spanから構築
      std::ospanstream oss1{span};

      std::cout << oss1.span().data() << std::endl;

      // (3) ムーブ構築
      std::ospanstream oss3{std::move(oss1)};

      std::cout << oss3.span().data() << std::endl;
    }

### 出力

    hello
    hello

## バージョン

### 言語

- C++23

### 処理系

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