std::as_bytes, std::as_writable_bytes
template< class T, std::size_t N> std::span<const std::byte, S/* see below */> as_bytes(std::span<T, N> s) noexcept; |
(1) | |
template< class T, std::size_t N> std::span<std::byte, S/* see below */> as_writable_bytes(std::span<T, N> s) noexcept; |
(2) | |
获得对 span s
的元素的对象表示的视图。
若 N
为 std::dynamic_extent
,则返回的 span S
的长度亦为 std::dynamic_extent
;否则它是 sizeof(T) * N 。
as_writable_bytes
仅若 std::is_const_v<T> 为 false 才参与重载决议。
返回值
1) 以 {reinterpret_cast<const std::byte*>(s.data()), s.size_bytes()} 构造的 span 。
2) 以 {reinterpret_cast<std::byte*>(s.data()), s.size_bytes()} 构造的 span 。
示例
运行此代码
#include <cstddef> #include <iomanip> #include <iostream> #include <span> void print(float const x, std::span<const std::byte> const bytes) { std::cout << std::setprecision(6) << std::setw(8) << x << " = { " << std::hex << std::showbase; for (auto const b : bytes) { std::cout << std::to_integer<int>(b) << ' '; } std::cout << std::dec << "}\n"; } int main() { /* mutable */ float data[1] { 3.141592f }; auto const const_bytes = std::as_bytes(std::span{ data }); print(data[0], const_bytes); auto const writable_bytes = std::as_writable_bytes(std::span{ data }); // 更改作为最高有效位的符号位( IEEE 754 浮点标准) writable_bytes[3] |= std::byte{ 0b1000'0000 }; print(data[0], const_bytes); }
可能的输出:
3.14159 = { 0xd8 0xf 0x49 0x40 } -3.14159 = { 0xd8 0xf 0x49 0xc0 }