std::as_bytes, std::as_writable_bytes
Определено в заголовочном файле <span> | ||
|---|---|---|
template< class T, std::size_t N >
std::span<const std::byte, S/* see below */>
as_bytes( std::span<T, N> s ) noexcept;
| (1) | (начиная с C++20) |
template< class T, std::size_t N >
std::span<std::byte, S/* see below */>
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) span, созданный с помощью
{reinterpret_cast<const std::byte*>(s.data()), s.size_bytes()}.
2) span, созданный с помощью
{reinterpret_cast<std::byte*>(s.data()), s.size_bytes()}.Пример
#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 }
См. также
|
(C++23) | неявно создаёт объекты в заданном хранилище, повторно используя представление объекта (шаблон функции) |
|
(C++17) | тип байта (перечисление) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/container/span/as_bytes