- span[meta header]
- std[meta namespace]
- function[meta id-type]
- cpp20[meta cpp]
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;
}- 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<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 <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;
}
}- std::as_writable_bytes[color ff0000]
- s.data()[link data.md]
- s.size()[link size.md]
- std::byte[link /reference/cstddef/byte.md]
- std::size[link /reference/iterator/size.md]
1
2
3
4
5
- C++20
- Clang: 9.0 [mark verified]
- GCC: ??
- Visual C++: ??