c union und bitfields
Kann bitfields verwendet werden, in die union?
- Wenn dabei zwei böse Dinge, haben Sie summieren oder multiplizieren? 😉
- +1 zu Amardeep. Nicht und nicht zu divya.
- Neighter bitfields noch Gewerkschaften müssen böse sein. Ich benutze Strukturen in den Gewerkschaften zu analysieren-byte-input/output-in embedded-software. Komfort outbalances seine Nachteile.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, das können Sie. Warum nicht? Bit-Felder in den Gewerkschaften Verhalten sich in gleicher Weise Verhalten Sie sich irgendwo anders. Es ist nichts besonderes über die bit-Felder in den Gewerkschaften (oder Gewerkschaften mit bit-Feldern).
Ja, es ist möglich, aber ich würde empfehlen, gegen Sie. Die Länge und die Verpackung von bitfields ist nicht tragbar. Die Größe der union wird es schwierig sein, um vorherzusagen (siehe hier). Es ist eine gewisse Komplexität, die Sie einführen in den code, wenn Sie verwenden, Gewerkschaften oder bitfields. Während dieser Komplexität können akzeptabel sein, in Ihrem code, die Kombination der beiden kann im Ergebnis eine inakzeptable Menge von Komplexität. Wenn Sie mit Gewerkschaften, Strukturen und bitfields, Sie laufen in Probleme mit Speicher Ausrichtung.
Wenn diese Wegwerf-code, muss nur noch gebaut werden und auf einer Maschine, dann ist es wohl in Ordnung. Allerdings, wenn Sie überprüfen, diese in die Versionskontrolle, wo es wird ewig Leben, empfehle ich dagegen.
Wenn Sie ein Beispiel geben, warum Sie dies tun wollen, das ich oder jemand anderes vorschlagen kann, die bessere alternative.
EDIT: geklärt, basierend auf Kommentare und Fragen nach feedback.
Wenn Sie darüber nachdenken, wie die union funktioniert, haben Sie die Antwort, das ist ja das, natürlich (warum nicht)? Wie wir erwarten, die union ist groß genug für das größte datum, und so automatisch die kleineren. Bitfields sind verpackt in einen "Container", und der compiler muss in der Lage sein zu bewerten, Ihre Letzte wirkliche Größe. Die folgende Abbildung zeigt einige interessante Fakten (und natürlich ist eine falsche Verwendung von union, aber nicht für die Bitfeld-Präsenz!)
Es ist nur unsicher, wenn Sie schreiben, um eine union-element und Lesen Sie ein anderes. Wenn Sie die details Ihrer Umsetzung sicherzustellen, dass das nicht passiert, dann eine union mit einem bitfied (und vermutlich auch andere Mitglieder) hat klar definierte, sichere Verhalten.
reinterpret_cast
. Technical Corrigendum 3 macht das klar.