คำถามติดแท็ก unions

15
ความแตกต่างระหว่างโครงสร้างและสหภาพ
มีตัวอย่างที่ดีที่จะให้ความแตกต่างระหว่าง a structและ a unionหรือไม่? โดยทั่วไปฉันรู้ว่าstructใช้หน่วยความจำทั้งหมดของสมาชิกและunionใช้พื้นที่หน่วยความจำสมาชิกที่ใหญ่ที่สุด มีระดับความแตกต่างของระบบปฏิบัติการอื่น ๆ บ้างไหม?
411 c  struct  unions 

15
วัตถุประสงค์ของสหภาพใน C และ C ++
ก่อนหน้านี้ฉันใช้สหภาพอย่างสะดวกสบาย วันนี้ฉันตื่นตระหนกเมื่อฉันอ่านโพสต์นี้และรู้ว่ารหัสนี้ union ARGB { uint32_t colour; struct componentsTag { uint8_t b; uint8_t g; uint8_t r; uint8_t a; } components; } pixel; pixel.colour = 0xff040201; // ARGB::colour is the active member from now on // somewhere down the line, without any edit to pixel if(pixel.components.a) // accessing the non-active member …
254 c++  c  unions  type-punning 


18
ใครจะใช้สหภาพเมื่อใด เป็นส่วนที่เหลือจากวัน C-only หรือไม่?
ฉันได้เรียนรู้ แต่ไม่ได้เข้าร่วมสหภาพ ข้อความ C หรือ C ++ ทุกข้อความที่ฉันผ่านแนะนำพวกเขา (บางครั้งก็ผ่านไป) แต่พวกเขามักจะให้ตัวอย่างที่เป็นประโยชน์น้อยมากว่าทำไมถึงใช้มัน สหภาพแรงงานจะมีประโยชน์ในกรณีที่ทันสมัย ​​(หรือแม้กระทั่งมรดก) เมื่อใด การคาดเดาเพียงสองข้อของฉันคือการเขียนโปรแกรมไมโครโปรเซสเซอร์เมื่อคุณมีพื้นที่ จำกัด มากในการทำงานหรือเมื่อคุณพัฒนา API (หรือสิ่งที่คล้ายกัน) และคุณต้องการบังคับให้ผู้ใช้ปลายทางมีเพียงอินสแตนซ์เดียวของวัตถุ / ประเภทต่างๆที่ ครั้งหนึ่ง. สองคนนี้เดาได้ใกล้เคียงกันหรือเปล่า?
136 c++  c  unions 

5
การเข้าถึงสมาชิกสหภาพที่ไม่ได้ใช้งานและพฤติกรรมที่ไม่ได้กำหนด?
ฉันรู้สึกว่าการเข้าถึงไฟล์ unionสมาชิกนอกเหนือจากชุดสุดท้ายคือ UB แต่ดูเหมือนว่าฉันจะไม่พบข้อมูลอ้างอิงที่มั่นคง (นอกเหนือจากคำตอบที่อ้างว่าเป็น UB แต่ไม่ได้รับการสนับสนุนจากมาตรฐาน) ดังนั้นพฤติกรรมที่ไม่ได้กำหนดหรือไม่?

6
เหตุใด C ++ จึงไม่อนุญาตโครงสร้างที่ไม่ระบุตัวตน
คอมไพเลอร์ C ++ บางตัวอนุญาตให้ใช้สหภาพและโครงสร้างที่ไม่ระบุชื่อเป็นส่วนขยายของ C ++ มาตรฐาน มันเป็นน้ำตาลที่มีประโยชน์มากในบางครั้ง อะไรคือเหตุผลที่ป้องกันไม่ให้สิ่งนี้เป็นส่วนหนึ่งของมาตรฐาน? มี Roadblock ทางเทคนิคหรือไม่? ปรัชญา? หรือแค่ไม่เพียงพอที่จะต้องพิสูจน์? นี่คือตัวอย่างของสิ่งที่ฉันกำลังพูดถึง: struct vector3 { union { struct { float x; float y; float z; }; float v[3]; }; }; คอมไพเลอร์ของฉันจะยอมรับเรื่องนี้ แต่ก็เตือนว่า"นิรนาม struct / ยูเนี่ยน" เป็นส่วนขยายที่ไม่ได้มาตรฐานที่ C
93 c++  struct  unions 

2
วัตถุประสงค์ของการใช้สหภาพกับสมาชิกเพียงคนเดียวคืออะไร?
เมื่อฉันอ่านซอร์สโค้ด seastarฉันสังเกตเห็นว่ามีโครงสร้างแบบสหภาพที่เรียกว่าtx_sideมีสมาชิกเพียงคนเดียว แฮ็คนี้จะจัดการกับปัญหาบางอย่างหรือไม่? FYI ฉันวางtx_sideโครงสร้างด้านล่าง: union tx_side { tx_side() {} ~tx_side() {} void init() { new (&a) aa; } struct aa { std::deque<work_item*> pending_fifo; } a; } _tx;
89 c++  c++14  unions 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.