GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
std::byte(3) C++ Standard Libary std::byte(3)

std::byte - std::byte


Defined in header <cstddef>
enum class byte : unsigned char {} ; (since C++17)


std::byte is a distinct type that implements the concept of byte as specified in the
C++ language definition.


Like char and unsigned char, it can be used to access raw memory occupied by other
objects (object representation), but unlike those types, it is not a character type
and is not an arithmetic type. A byte is only a collection of bits, and the only
operators defined for it are the bitwise ones.

std::to_integer


template <class IntegerType> (since C++17)
constexpr IntegerType to_integer( std::byte b ) noexcept;


Equivalent to: return IntegerType(b); This overload participates in overload
resolution only if std::is_integral_v<IntegerType> is true.

std::operator<<=,operator>>=


template <class IntegerType>
constexpr std::byte& operator<<=( std::byte& b, IntegerType shift (1) (since C++17)
) noexcept;
template <class IntegerType>
constexpr std::byte& operator>>=( std::byte& b, IntegerType shift (2) (since C++17)
) noexcept;


1) Equivalent to: return b = b << shift; This overload participates in overload
resolution only if std::is_integral_v<IntegerType> is true.
2) Equivalent to: return b = b >> shift;


This overload participates in overload resolution only if
std::is_integral_v<IntegerType> is true.

std::operator<<,operator>>


template <class IntegerType>
constexpr std::byte operator <<( std::byte b, IntegerType shift ) (1) (since C++17)
noexcept;
template <class IntegerType>
constexpr std::byte operator >>( std::byte b, IntegerType shift ) (2) (since C++17)
noexcept;


1) Equivalent to: return std::byte(static_cast<unsigned int>(b) << shift); This
overload participates in overload resolution only if std::is_integral_v<IntegerType>
is true.
2) Equivalent to: return std::byte(static_cast<unsigned int>(b) >> shift);


This overload participates in overload resolution only if
std::is_integral_v<IntegerType> is true.

std::operator|=,operator&=,operator^=


constexpr std::byte& operator|=( std::byte& l, std::byte r ) (1) (since C++17)
noexcept;
constexpr std::byte& operator&=( std::byte& l, std::byte r ) (2) (since C++17)
noexcept;
constexpr std::byte& operator^=( std::byte& l, std::byte r ) (3) (since C++17)
noexcept;


1) Equivalent to: return l = l | r;.
2) Equivalent to: return l = l & r;.
3) Equivalent to: return l = l ^ r;.

std::operator|,operator&,operator^,operator~


constexpr std::byte operator|( std::byte l, std::byte r ) (1) (since C++17)
noexcept;
constexpr std::byte operator&( std::byte l, std::byte r ) (2) (since C++17)
noexcept;
constexpr std::byte operator^( std::byte l, std::byte r ) (3) (since C++17)
noexcept;
constexpr std::byte operator~( std::byte b ) noexcept; (4) (since C++17)


1) Equivalent to: return std::byte(static_cast<unsigned int>(l) |
static_cast<unsigned int>(r));.
2) Equivalent to: return std::byte(static_cast<unsigned int>(l) &
static_cast<unsigned int>(r));.
3) Equivalent to: return std::byte(static_cast<unsigned int>(l) ^
static_cast<unsigned int>(r));.
4) Equivalent to: return std::byte(~static_cast<unsigned int>(b));


A numeric value n can be converted to a byte value using std::byte{n}, due to C++17
relaxed enum class initialization rules.


A byte can be converted to a numeric value (such as to produce an integer hash of an
object) using std::to_integer.


Feature-test macro: __cpp_lib_byte

// Run this code


#include <iostream>
#include <cstddef>
#include <bitset>


std::ostream& operator<< (std::ostream& os, std::byte b) {
return os << std::bitset<8>(std::to_integer<int>(b));
}


int main()
{
std::byte b{42};
std::cout << "1. " << b << '\n';


// b *= 2 compilation error
b <<= 1;
std::cout << "2. " << b << '\n';


b >>= 1;
std::cout << "3. " << b << '\n';


std::cout << "4. " << (b << 1) << '\n';
std::cout << "5. " << (b >> 1) << '\n';


b |= std::byte{0b11110000};
std::cout << "6. " << b << '\n';


b &= std::byte{0b11110000};
std::cout << "7. " << b << '\n';


b ^= std::byte{0b11111111};
std::cout << "8. " << b << '\n';
}


1. 00101010
2. 01010100
3. 00101010
4. 01010100
5. 00010101
6. 11111010
7. 11110000
8. 00001111

2022.07.31 http://cppreference.com

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.