Perbedaannya adalah nama pengidentifikasi hancur ( _ZN12_GLOBAL__N_11bEvs _ZL1b, yang tidak terlalu penting, tetapi keduanya dirakit menjadi simbol lokal dalam tabel simbol (tidak adanya .globalarahan 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
Adapun ruang nama anonim bersarang:
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
Semua ruang nama anonim tingkat 1 di unit terjemahan digabungkan satu sama lain, Semua ruang nama anonim bersarang tingkat 2 di unit terjemahan digabungkan satu sama lain
Anda juga dapat memiliki namespace bersarang (sebaris) di namespace anonim
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
Anda juga dapat memiliki ruang nama sebaris anonim, tetapi sejauh yang saya tahu, inlinepada ruang nama anonim memiliki 0 efek
inline namespace {
inline namespace {
int a = 3;
}
}
_ZL1b: _Zberarti ini adalah pengidentifikasi yang rusak. Lberarti itu adalah simbol lokal static. 1adalah panjang pengidentifikasi bdan kemudian pengidentifikasib
_ZN12_GLOBAL__N_11aE _Zberarti ini adalah pengidentifikasi yang rusak. Nberarti ini adalah namespace 12adalah panjang nama namespace anonim _GLOBAL__N_1, maka nama namespace anonim _GLOBAL__N_1, kemudian 1panjang pengidentifikasi a, aadalah pengidentifikasi adan Emenutup pengidentifikasi yang berada di namespace.
_ZN12_GLOBAL__N_11A1aE sama seperti di atas kecuali ada level namespace lain di dalamnya 1A
staticdalam konteks ini tidak dihargai ; meskipun namespace yang tidak disebutkan namanya adalah alternatif yang unggulstatic, ada contoh di mana ia gagal ketikastaticdatang untuk menyelamatkan .