std::as_bytes, std::as_writable_bytes
来自cppreference.com
<tbody>
</tbody>
| 在标头 <span> 定义
|
||
template< class T, std::size_t N > std::span<const std::byte, S/* 见下文 */> as_bytes( std::span<T, N> s ) noexcept; |
(1) | (C++20 起) |
template< class T, std::size_t N > std::span<std::byte, S/* 见下文 */> as_writable_bytes( std::span<T, N> s ) noexcept; |
(2) | (C++20 起) |
获得对 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::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});
// 更改作为最高有效位的符号位(IEEE 754 浮点标准)
writable_bytes[3] |= std::byte{0B1000'0000};
print(data[0], const_bytes);
}
可能的输出:
3.14159 = { D8 0F 49 40 }
-3.14159 = { D8 0F 49 C0 }
参阅
| 在给定的存储上创建对象并复用对象表示 (函数模板) | |
(C++17) |
字节类型 (枚举) |