2017-12-19 7 views
0

私はこの書籍をC++でデータ構造とアルゴリズムを読んでいます。第4版Adam Drozdekによって次のコードが発生しました。私の質問はコロンがunsigned int successor : 1;で何をするのかです。 コロンがsuccessorを1ビットだけ取ると答えた。しかし、私は変数がアドレス可能でなければならないので、ブール変数はバイトの倍数を取ることを知っています。 successorが1ビットしか必要ない場合は、どのようにアドレス可能にすることができますか?次のC++コードでコロンとは何ですか?

template<class T> 
class ThreadedNode { 
    public: 
     ThreadedNode() { 
      left = right = 0; 
     } 
     ThreadedNode(const T& e, ThreadedNode *l = 0, ThreadedNode *r = 0) { 
      el = e; left = l; right = r; successor = 0; 
     } 
     T el; 
     ThreadedNode *left, *right; 
     unsigned int successor : 1; 
}; 
+2

誰かが何をしているのか分かりません。この場所のビットフィールドは全く役に立たない。 – SergeyA

答えて

1

これはBit Fieldとして知られています。式unsigned int successor : 1;は、successorという名前のunsigned intが1ビットのみを使用すると宣言しています。

指定されたより多くのビットを使用する必要がある方法でビットフィールドを使用する動作は、実装定義の動作です。ビットフィールドへのポインタまたは非const参照を得ることも不可能です。なぜなら、それらは必ずしもバイトの先頭から始まるわけではないからです。

ビットフィールドを使用すると、互換性のあるビットフィールドをまとめてコンパイルすることによって、コンパイラはタイプのサイズを縮小することができます。ビットフィールドは、サイズ縮小の点でバインドされておらず、コンパイラのための唯一の機会です。

関連する問題