std::as_bytes, std::as_writable_bytes
来自 cppreference.com
在头文件 <span> 中定义 |
||
template< class T, std::size_t N > std::span<const std::byte, S/* see below */> |
(1) | (自 C++20 起) |
template< class T, std::size_t N > std::span<std::byte, S/* see below */> |
(2) | (自 C++20 起) |
获取跨度 s 元素对象表示的视图。
如果 N
是 std::dynamic_extent,则返回的跨度 S
的范围也是 std::dynamic_extent;否则为 sizeof(T) * N.
只有当 std::is_const_v<T> 为 false 时,as_writable_bytes
才会参与重载解析。
[edit] 返回值
1) 使用 {reinterpret_cast<const std::byte*>(s.data()), s.size_bytes()} 构造的跨度。
2) 使用 {reinterpret_cast<std::byte*>(s.data()), s.size_bytes()} 构造的跨度。
[edit] 示例
运行这段代码
#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::uppercase << std::setfill('0'); for (auto const b : bytes) std::cout << std::setw(2) << 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}); // Change the sign bit that is the MSB (IEEE 754 Floating-Point Standard). writable_bytes[3] |= std::byte{0B1000'0000}; print(data[0], const_bytes); }
可能的输出
3.14159 = { D8 0F 49 40 } -3.14159 = { D8 0F 49 C0 }
[edit] 另请参阅
隐式地在给定存储中创建对象,并重用对象表示 (函数模板) | |
(C++17) |
字节类型 (枚举) |