一度でも試したことのある人やC/C++仕様を熟知している人なら既知だと思いますが、ビットフィールドのアドレスを取得することはできません。
つまりポインタや参照を取る関数の引数に渡すこともできません。
上記のようなコードを書くと、VC++2010などではコンパイルする以前にIntelliSenseに怒られます。*1
そしてもちろんコンパイルするとコンパイルエラーになります。
ちなみに、STLの std::bitset
テンプレートクラスも値を1ビット単位で扱いますが、こちらはどうかというと…
1
2
3
4
5
6
7
8
9
10
| - | | | | ! |
|
何の問題も無くコンパイル&リンク成功して実行できます。
std::bitset<N>
クラスの非const版 operator[]
オーバロードはビットの参照を返すわけではなく、 std::bitset<N>::reference
クラスの値を返します。
このクラスが std::bitset<N>
インスタンスの特定ビットに対する操作を行うようになっています。
詳しくは bitset ヘッダを読みましょう。
例えば構造体定義のあるソースコードを解析して各メンバ値を別の構造体等へコンバートするコードを自動生成するような処理を作る場合にメンバの中にビットフィールドが含まれているとハマることがあるので気を付けましょう。
例がやけに具体的なのは気にしてはいけません。いけませんったら。