std::bitset::operator[](3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

🌸 std::bitset::operator[](3) 🌸

okay so this page is from the C++ Standard Libary manual, and it’s literally all about indexing into a std::bitset β€” slay πŸ’…βœ¨

πŸŽ€ NAME πŸŽ€

std::bitset::operator[] - std::bitset::operator[]

✨ Synopsis ✨

bool operator[]( std::size_t pos ) const; (1) (constexpr since C++11)
reference operator[]( std::size_t pos );  (2) (constexpr since C++23)

Bestie, here’s the vibe: this accesses the bit at position pos. Version (1) returns the value of the bit, and version (2) returns an object of type std::bitset::reference that allows modification of the value. 🫢

⚠️ Unlike test(), this does not throw exceptions: the behavior is undefined if pos is out of bounds. Not a cute look, so keep pos in range, okay? 😭

πŸ’– Parameters πŸ’–

  • pos β€” position of the bit to return

🌈 Return value 🌈

  1. The value of the requested bit.
  2. An object of type std::bitset::reference, which allows writing to the requested bit.

🚫 Exceptions 🚫

  • (none)

πŸ“ Example πŸ“

// Run this code πŸ‘‡

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

int main()
{
    std::bitset<8> b1{0b00101010}; // binary literal for 42

    for (std::size_t i = 0; i < b1.size(); ++i)
        std::cout << "b1[" << i << "]: " << b1[i] << '\n';
    b1[0] = true; // modifies the first bit through bitset::reference

    std::cout << "After setting bit 0, b1 holds " << b1 << '\n';
}

Output

b1[0]: 0
b1[1]: 1
b1[2]: 0
b1[3]: 1
b1[4]: 0
b1[5]: 1
b1[6]: 0
b1[7]: 0
After setting bit 0, b1 holds 00101011

🧚 Defect reports 🧚

The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

  • DR LWG 11, applied to C++98 β€” behavior as published: 1. the description was missing in the C++ standard; 2. there was only the non-const overload. Correct behavior: 1. description added; 2. added the const overload. πŸ’€βœ¨
  • DR LWG 907, applied to C++98 β€” behavior as published: the behavior of reading the bit at pos was equivalent to that of test(pos), but test() may throw exceptions. Correct behavior: avoids mentioning test(). πŸ‘‘

πŸ‘‘ See also πŸ‘‘

  • test β€” accesses specific bit (public member function)

mwah πŸ’‹ source/version: http://cppreference.com Β· date: 2024.06.10 β€” bye bestie, go index those bits responsibly 🫢✨

πŸ“¦ where this page comes from