C 語言中 struct 與 union 共用同一標籤名稱空間,不能同名;C++ 引入命名空間機制,可在不同 namespace 同名。本文釐清跨語言差異與賦值規則。
| 語言 | struct/union 標籤空間 | 同名可行性 | 解決方案 |
|---|---|---|---|
| C (C89/C99/C11) | 共用同一標籤空間 | ❌ 不可 | 改名:struct Node / union Node_u |
| C++ (C++98 起) | 各自獨立 + namespace 隔離 | ✅ 可(不同 namespace) | namespace A { struct Node{}; } namespace B { union Node{}; } |
s1 = s2;),逐成員複製(淺拷貝)。memcpy。C++ 允許為 union 定義複製建構函式/賦值運算子,實現類安全的整體複製,但需開發者自行保證語義正確。
跨語言移植時:C 代碼改 C++ 可直接受益於 namespace 隔離;C++ 代碼回移 C 必須重命名所有衝突的 struct/union 標籤。