最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<span>

# std::as_writable_bytes(C++20)

    namespace std {
      template <class ElementType, size_t Extent>
      span<byte, Extent == dynamic_extent ? dynamic_extent : sizeof(ElementType) * Extent>
        as_writable_bytes(span<ElementType, Extent> s) noexcept;
    }

## 概要

書込み可能なバイト列としてシーケンスを参照する。

この関数を使用することで、メモリ連続性をもつ要素列をバイト列として扱える。シリアライズやデータ転送といった、バイト指向アクセスが必要なシステムプログラミングに使用できる。

## 戻り値

以下と等価：

    return {reinterpret_cast<byte*>(s.data()), s.size_bytes()};

## 例外

投げない

## 計算量

定数時間

## 例

    #include <iostream>
    #include <span>
    #include <sstream>
    #include <iterator>

    void deserialize(std::span<std::byte> s)
    {
      int ar[] = {1, 2, 3, 4, 5};

      std::stringstream ss;
      ss.write(reinterpret_cast<const char*>(ar), sizeof(int) * std::size(ar));
      ss.read(reinterpret_cast<char*>(s.data()), s.size());
    }

    int main()
    {
      int ar[5] = {};
      deserialize(std::as_writable_bytes(std::span{ar}));

      for (int x : ar) {
        std::cout << x << std::endl;
      }
    }

### 出力

    1
    2
    3
    4
    5

## バージョン

### 言語

- C++20

### 処理系

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