首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C/C++ 結構體與聯合體命名空間規則:能否同名?

     編輯:程式設計疑難解答

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{}; }

整體賦值差異

  • struct:支援整體賦值(s1 = s2;),逐成員複製(淺拷貝)。
  • union:C 標準禁止整體賦值(編譯器通常報錯),需逐成員賦值或 memcpy。
    原因:union 同一時間僅一個成員有效,整體複製語義模糊(複製哪個成員的位元模式?)。

C++ 額外補充

C++ 允許為 union 定義複製建構函式/賦值運算子,實現類安全的整體複製,但需開發者自行保證語義正確。

跨語言移植時:C 代碼改 C++ 可直接受益於 namespace 隔離;C++ 代碼回移 C 必須重命名所有衝突的 struct/union 標籤。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved