std::bitset<N>::operator[]
From cppreference.com
| bool operator[]( std::size_t pos ) const; |
(1) | (C++11 以降 constexpr) |
| reference operator[]( std::size_t pos ); |
(2) | (C++23 以降 constexpr) |
位置 pos のビットにアクセスします。最初のオーバーロードはビットの値を返しますが、2番目のオーバーロードは値の変更を許可する std::bitset::reference 型のオブジェクトを返します。
test() とは異なり、例外をスローしません。 pos が範囲外の場合、動作は未定義です。
目次 |
[編集] パラメータ
| pos | - | 返すビットの位置 |
[編集] 戻り値
1) 要求されたビットの値。
2) std::bitset::reference 型のオブジェクト。これにより、要求されたビットへの書き込みが可能になります。
[編集] 例外
(なし)
[編集] 例
このコードを実行
#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'; }
出力
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
[編集] 不具合報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| LWG 11 | C++98 | 1. C++標準で説明が欠落していた 2. 非constオーバーロードのみが存在した |
1. 説明が追加された 2. constオーバーロードが追加された |
| LWG 907 | C++98 | 位置 pos のビットの読み取り動作が test(pos) と同等だったが、 `test()` は例外をスローする可能性があったtest() に言及しないようにした |
(※上記15-21は LWG 11, LWG 907 の修正内容の要約のようです。原文の意図を汲んで自然な日本語になるよう意訳しました。) |
[編集] 関連項目
| 特定のビットにアクセスする (public member function) |