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

履歴 編集

function
<span>

# std::as_bytes(C++20)

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

## 概要

読み取り専用バイト列としてシーケンスを参照する。

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

## 戻り値

以下と等価：

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

## 例外

投げない

## 計算量

定数時間

## 例

    #include <span>
    #include <fstream>

    // serialize(const char*, std::size_t length);
    // このインタフェースの代わりにspanを使用する。
    void serialize(std::span<const std::byte> s)
    {
      std::ofstream file{"a.dat"};
      file.write(reinterpret_cast<const char*>(s.data()), s.size());
    }

    int main()
    {
      int ar[] = {1, 2, 3, 4, 5};
      serialize(std::as_bytes(std::span{ar}));
    }

### 出力

## バージョン

### 言語

- C++20

### 処理系

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