- span[meta header]
- std[meta namespace]
- function[meta id-type]
- cpp20[meta cpp]
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;
}
- size_t[link /reference/cstddef/size_t.md]
- byte[link /reference/cstddef/byte.md]
- dynamic_extent[link /reference/span/dynamic_extent.md]
読み取り専用バイト列としてシーケンスを参照する。
この関数を使用することで、メモリ連続性をもつ要素列をバイト列として扱える。シリアライズやデータ転送といった、バイト指向アクセスが必要なシステムプログラミングに使用できる。
以下と等価:
return {reinterpret_cast<const byte*>(s.data()), s.size_bytes()};
- byte[link /reference/cstddef/byte.md]
- s.data()[link data.md]
- s.size_bytes()[link size_bytes.md]
投げない
定数時間
#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}));
}
- std::as_bytes[color ff0000]
- s.data()[link data.md]
- s.size()[link size.md]
- std::byte[link /reference/cstddef/byte.md]
- C++20
- Clang: 9.0
- GCC: ??
- Visual C++: ??