अंतर मंगली पहचानकर्ता का नाम है ( _ZN12_GLOBAL__N_11bE
बनाम _ZL1b
, जो वास्तव में मायने नहीं रखता है, लेकिन दोनों को प्रतीक तालिका में स्थानीय प्रतीकों में इकट्ठा किया जाता है ( .global
asm निर्देश का अभाव )।
#include<iostream>
namespace {
int a = 3;
}
static int b = 4;
int c = 5;
int main (){
std::cout << a << b << c;
}
.data
.align 4
.type _ZN12_GLOBAL__N_11aE, @object
.size _ZN12_GLOBAL__N_11aE, 4
_ZN12_GLOBAL__N_11aE:
.long 3
.align 4
.type _ZL1b, @object
.size _ZL1b, 4
_ZL1b:
.long 4
.globl c
.align 4
.type c, @object
.size c, 4
c:
.long 5
.text
एक नेस्टेड अनाम नामस्थान के लिए:
namespace {
namespace {
int a = 3;
}
}
.data
.align 4
.type _ZN12_GLOBAL__N_112_GLOBAL__N_11aE, @object
.size _ZN12_GLOBAL__N_112_GLOBAL__N_11aE, 4
_ZN12_GLOBAL__N_112_GLOBAL__N_11aE:
.long 3
.align 4
.type _ZL1b, @object
.size _ZL1b, 4
अनुवाद इकाई में सभी प्रथम स्तर के अनाम नामस्थान एक दूसरे के साथ संयुक्त हैं, अनुवाद इकाई में सभी दूसरे स्तर के नामांकित अनाम नाम एक दूसरे के साथ संयुक्त हैं
एक अनाम नामस्थान में एक नेस्टेड (इनलाइन) नामस्थान भी हो सकता है
namespace {
namespace A {
int a = 3;
}
}
.data
.align 4
.type _ZN12_GLOBAL__N_11A1aE, @object
.size _ZN12_GLOBAL__N_11A1aE, 4
_ZN12_GLOBAL__N_11A1aE:
.long 3
.align 4
.type _ZL1b, @object
.size _ZL1b, 4
which for the record demangles as:
.data
.align 4
.type (anonymous namespace)::A::a, @object
.size (anonymous namespace)::A::a, 4
(anonymous namespace)::A::a:
.long 3
.align 4
.type b, @object
.size b, 4
आपके पास अनाम इनलाइन नामस्थान भी हो सकते हैं, लेकिन जहां तक मैं बता सकता हूं, inline
अनाम नाम स्थान पर 0 प्रभाव है
inline namespace {
inline namespace {
int a = 3;
}
}
_ZL1b
: _Z
इसका मतलब यह एक पहचाना हुआ पहचानकर्ता है। L
इसका मतलब है कि यह एक स्थानीय प्रतीक है static
। 1
पहचानकर्ता की लंबाई b
और उसके बाद पहचानकर्ता हैb
_ZN12_GLOBAL__N_11aE
_Z
इसका मतलब यह एक पहचाना हुआ पहचानकर्ता है। N
यह एक नाम स्थान है इसका मतलब है 12
गुमनाम नाम स्थान नाम की लंबाई है _GLOBAL__N_1
, तो गुमनाम नाम स्थान नाम _GLOBAL__N_1
, तो 1
पहचानकर्ता की लंबाई है a
, a
पहचानकर्ता है a
औरE
पहचानकर्ता बंद कर देता है कि एक नाम स्थान में रहता है।
_ZN12_GLOBAL__N_11A1aE
ऊपर के समान ही है, इसमें एक और नाम स्थान स्तर है 1A
static
में इस संदर्भ का उपयोग पूर्ववत था ; हालांकि अनाम नेमस्पेस एक बेहतर विकल्प हैstatic
, लेकिन ऐसे उदाहरण हैं जहां यहstatic
बचाव में आता है ।