1. Extending Namespace
สามารถเปิด namespace เดียวกันหลายครั้งได้ สมาชิกจะรวมกัน
namespace MyNS { int a = 10; }
namespace MyNS { int b = 20; } // ขยาย namespace เดียวกัน
// ใช้งาน
cout << MyNS::a << MyNS::b; // 10 20
2. Unnamed (Anonymous) Namespace
Namespace ไม่มีชื่อ ใช้สำหรับ:
- จำกัด visibility ภายใน translation unit (internal linkage)
- แทนการใช้
staticสำหรับ global variables/functions - Compiler สร้างชื่อ unique ให้อัตโนมัติ
namespace { // unnamed
int x = 10;
}
int main() { cout << x; } // ใช้ได้โดยตรงในไฟล์นี้เท่านั้น
Unnamed namespace เป็นวิธีที่ทันสมัยและแนะนำมากกว่า static global