ticoAg/ChineseCorpus-Kaggle-fanti huggingface dataset:
*  E.sy The First Complete Governmental Online Services
*  Tartus City Council
中華人民共和國第六屆農民運動會于2008年10月26日——11月1日在福建省泉州市舉行。吉祥物為“同同”，會歌為《風浩蕩情飛揚》，口號是“綠色農運、金色夢想”。
本屆賽事共有包括臺灣省在內的32個代表團，3000多名運動員參加，而香港和澳門僅派出觀摩團出席。
比賽項目包括田徑、籃球、武術、游泳、象棋、摔跤、秧歌、舞龍、龍舟、風箏、釣魚、自行車載重、毽球和民兵軍事三項等15個大項、180多個小項。
Name mangling，或者Decorated Name，是指程序設計語言中具有存儲性質的對象的名字被編譯器改寫，以適合編譯器、鏈接器(linker)、匯編器(assembler)使用。所謂的具有存儲性質的對象，即lvalue對象，是指要實際占用內存空間、有內存地址的那些實體對象，例如：變量(variables)、函數、函數指針等。C++中的純虛函數作為特例也屬于這一范疇。而數據類型(data type)就不屬于具有存儲性質的對象。Name mangling如何翻譯成中文，尚無廣泛接受的譯法。可翻譯作改名或名字修飾(name decorating)。
對于支持重載(overload)的程序設計語言，name mangling是必需的因而具有特別重要意義。C++允許函數重載
int foo(int i);
void foo(char c);
C++也允許變量名稱在不同限定（qualifier)下同名：
std::cout;
::cout;
因此C++的編譯器必須給這些函數及變量不同的名字以供程序編譯鏈接、載入時的內部辨別使用。
C++的編譯器可大略分為Windows平臺上的Microsoft Visual C++與類Unix平臺上的GNU CC/g++兩大類，分別成了各自操作系統環境下的業界工業標準。例如，Windows平臺上的Intel C++ Compiler（ICC）與Digital Mars C++，都與Visual C++保持了二進制兼容(Application Binary Interface, ABI)。而Linux平臺上的Intel C++ Compiler（ICC）與HP aC++，都與GCC 3.x/4.x做到二進制兼容。GCC是開源產品，它的內部實現機制是公開的；而Visual C++不公開它內部實現細節，因此在name mangling上并無詳盡的正式文檔，Visual C++ name mangling的細節屬于hacker行為。
一般情況下，編程者不需要知道C/C++函數的修飾名字。但是，如果在匯編源程序或者內聯匯編中引用了C/C++函數，就必須使用其正確的修飾名字。
C語言并不支持重載，因此C程序中禁止函數與函數同名，也就沒有必要做name mangling。但C語言的函數調用協議(calling conventions)五花八門，用某一種調用協議編譯的靜態庫或動態庫的函數，如果用另外的調用協議去調用將會導致錯誤甚至系統崩潰。因此C語言編譯器對函數的名字做少量的修飾，用于區別該函數支持哪種調用協議，這可以給編譯、鏈接、特別是庫函數的載入提供額外的檢查信息。Microsoft C編譯器在八十年代最先引入這種mangling模式，隨后各家編譯器如Digital Mars, Borland, GNU gcc等紛紛效仿。
目前，C語言常用的調用協議有三種：cdecl, stdcall與fastcall，其它眾多調用協議如__pascal, __fortran, __syscall, __far等基本上算是過時了(obsolote)，因此無需考慮。cdecl的函數被改名為_name；stdcall的函數被改名為_name@X；fastcall的函數被改名為@name@X。其中X是函數形參所占用的字節長度(包括那些用寄存器傳遞的參數, 如fastcall協議). 例如：
int __cdecl foo(int i); // mangled name is _foo;
int __stdcall bar(int j); // mangled name is _bar@4
int __fastcall qux(int i) ; // mangled name is @qux@4
注意在64位Windows平臺上，由于ABI有正式標準可依，只存在一種子程序調用協議，所以該平臺上的C語言的函數不在名字前加上下劃線(leading underscore). 這會導致一些老的程序(legacy program), 例如使用'alias'去鏈接C語言的函數的Fortran程序不能正常工作。
C++語言由于含有大量復雜的語言特性，如classes, templates, namespaces, operator overloading等，這使得對象的名字在不同使用上下文中具有不同的意義。所以C++的name mangling非常復雜。
這些名字被mangled的對象，實際上都是具有全局屬性的存儲對象(storage object)，其名字將綁定到所占用內存空間的地址，都有lvalue。存儲對象具體可分為數據變量(data variable)與函數(function)。為什么不考慮函數的非靜態局部變量、類的非靜態數據成員呢？因為編譯器把函數的非靜態局部變量翻譯為sp+固定的偏移量；把類的非靜態數據成員翻譯為this+固定的偏移量。
下文使用了巴科斯-瑙爾范式(BNF)來表述一些name mangling的語法定義。方括號表示該項出現0次或1次，除非在方括號后用上下角標給出該項出現的上下限。下文使用''類''，一般包含了class、struct、union等復合數據類型。
::= @ @∞0 @
C++中被mangled的名字都使用問號(?)開始，因為這與用字母數字(alphanumeric)、下劃線(_)或@開頭的C語言程序中的被mangled的名字能完全區分開。
C++中的變量與函數，可定義于名字空間或類中。所以變量與函數受到名字空間或類的限定(qualification)。而名字空間、類又可以嵌套(nest)。
表示變量與函數的名字及所定義的名字空間（或類）的嵌套情況。并采用與C++程序中作用域嵌套相反的順序編碼。例如，namespace1::nestedClass::something編碼為something@nestedClass@namespace1@@。
Name mangling時，名字的字符串用@符號作為結束標志。例如@，表示這個字符串以@符號作為結束標志。因為名字的長度不是事先確定的。如果一個詞法單元的長度是確定的，這些詞法單元就不用@作為結尾標志，例如下文中只需用單個字母表示，則無需額外的結束標志。
是變量與函數的類型信息的編碼表示。對于數據對象，就是它的數據類型，見數據對象的name mangling；對于函數，類型信息就是它的返回值類型、參數類型列表、調用協議等情況，見函數的name mangling。
這里所說的數據對象，包括全局變量(global variables)、類的靜態數據成員變量(static member variables of classes)。
::= ?@@∞0@&lt;data access modifier&gt;
&lt;data type&gt;
&lt;data access modifier&gt;用于表示數據對象的類別，其編碼為：
Private static member
Protected static member
Public static member
是數據對象的訪問屬性的編碼表示，一般常用的值有：A表示default對象、B表示const對象、C表示volatile對象、D表示const volatile對象。詳見小節:。需要注意的是對于指針、數組、引用類型的對象，是對所指向的基類型的內存空間的訪問屬性。
int alpha;    // mangled as ?alpha@@3HA 其中3表示全局變量，H表示整形，A表示非const非volatile
char beta6 = "Hello"; // mangled as ?beta@@3PADA
//其中P表示為指針(或一維數組)且指針自身為非const非volatile，
//D表示char類型，兩次出現的A都表示基類型為非const非volatile
class myC{
static int s_v;       // mangled as ?s_v@myC@@0HA 其中0表示私有靜態數據成員
函數需要分配內存空間以容納函數的代碼，函數的名字實際上都是lvalue，即指向一塊可執行內存空間的起始地址。而函數模板的實例化(function template instantiation)，也是lvalue，需要分配內存空間存儲實例化后的代碼，其name mangling在模板實例化的名字編碼中詳述。
::= ?@ @∞0 @
其中，給出了函數是near或far、是否為靜態函數、是類成員函數還是全局函數、是否為虛函數、類成員函數的訪問級別等基本信息。需要注意，far屬性僅適用于Windows 16位環境，32位或64位環境下使用扁平(flat)內存地址模型，函數只能具有near屬性。
類成員函數的是指是否為只讀成員函數(constant member function). 如果不是const，則編碼為A；如果是const，則編碼為B；如果是類的靜態成員函數，則省略該項，因為靜態成員函數沒有this指針，無法修改類對象的數據。
是指函數的調用協議。詳見調用協議的編碼。常見的調用協議的編碼為：__cdecl是A, __pascal是C, __thiscall是E, __stdcall是G, __fastcall是I。在Windows 64位編譯環境中唯一允許的調用協議的編碼是A（詳見64位程序的調用約定）。
是指函數的返回值的是否有const或volatile屬性：
如果函數的返回值不具有const或volatile性質，那么該項在編碼中被省略；但是如果函數的返回類型是class、struct或union等復合數據類型，此項在編碼中是必需的，不能省略。
是函數的返回值的數據類型，詳見類型的編碼表示。
是函數的形參列表(parameter list)的數據類型的編碼。按照形參從左到右順序給每個參數的數據類型編碼，詳見類型的編碼表示。參數類型列表的編碼為：
* X (即函數沒有參數，或者說參數為void，該編碼也是列表的結束標志)
* type1 type2 ... typeN @ (正常N個形參. 以@作為列表的結束標志)
* type1 type2 ... Z (形參表最后一項為...，即ellipsis，其編碼Z也標志著列表的結束)
是函數拋出異常的說明，即異常規范(exception specification)。截至Visual C++ 2010，仍是接受但沒有實現異常規范。因此這一項編碼仍然保持為字符Z。
void Function1 (int a, int * b); /*mangled as ?Function1@@YAXHPAH@Z
其中 Y: 全局函數
A: cdecl調用協議
X: 返回類型為void
H: 第一個形參類型為int
PAH：第二個形參類型為整形指針
@： 形參表結束標志
Z: 缺省的異常規范 */
int Class1::MemberFunction(int a, int * b); /* mangled in 32-bit mode as
?MemberFunction@Class1@@QAEHHPAH@Z
其中 Q: 類的public function
A: 成員函數不是const member function
E: thiscall調用協議
H: 返回值為整形
H: 第一個形參類型為整形
PAH: 第二個形參為整形指針 */
C++程序中，需要考慮的具有全局存儲屬性的變量名字及函數的名字。這些名字受namespace、class等作用域(scope)的限定。因此，帶完整限定信息的名字定義為：
::=  ∞0 @
其中，是組成名字標識符的ASCII碼串，規定必須以@作為結尾后綴。是指構造函數、析構函數、運算符函數(operator function)、虛表(vtable)等內部數據結構等，詳見特殊名字的編碼。
與就是指C++程序中的名字空間與類。是指實例化后的函數模板或類模板，詳見模板實例化的名字編碼。是對一個函數內部用花括號{ ... }給出的不同的作用域(scope)的編號表示，詳見編號名字空間。是對一個mangled name的ASCII碼串中重復出現的類型或名字的簡寫表示方法，詳見重復出現的名字與類型的簡寫表示。是對靜態局部變量所在的函數名的表示方法，詳見嵌套的名字。
Visual C++的name mangling，有時會用到數(number)，例如多維數組的維數等。數的編碼使用一套獨特的方法：
* 1-10 編碼為 0-9，這節省了最常用的數的編碼長度；
* 大于10的數編碼為十六進制，原來的十六進制數字0-F用A-P代替，不使用前綴0或0x，使用后綴@作為結束標志；
* 負數編碼為前綴?后跟相應的絕對值(absolute value)的編碼。
例如，8編碼為7。29110編碼為BCD@。-1510編碼為?P@。
特殊名字(special names)是指類的構造函數、析構函數、運算符函數、類的內部數據結構等的名字，表示為前綴?后跟編碼。已知的編碼：
不帶下劃線(_)的含義
前置下劃線(_)的含義
前置雙下劃線(__)的含義
operator /=
operator %=
operator &gt;&gt;=
operator delete
operator &lt;&lt;=
operator &amp;=
operator &gt;&gt;
operator &#124;=
operator &lt;&lt;
operator ^=
operator !
'vftable'
'vbtable'
'vcall'
'typeof'
'managed vector constructor iterator'
operator returntype
'local static guard'
'managed vector destructor iterator'
operator -&gt;
'string'(Unknown)
'eh vector copy constructor iterator'
'vbase destructor'
'eh vector vbase copy constructor iterator'
operator ++
'vector deleting destructor'
operator --
'default constructor closure'
operator -
'scalar deleting destructor'
'vector constructor iterator'
operator &amp;
'vector destructor iterator'
operator -&gt;*
'vector vbase constructor iterator'
operator /
'virtual displacement map'
operator %
'eh vector constructor iterator'
operator &lt;
'eh vector destructor iterator'
operator &lt;=
'eh vector vbase constructor iterator'
operator &gt;
'copy constructor closure'
operator &gt;=
'udt returning' (prefix)
operator ,
RTTI-related code (see below)
operator ~
'local vftable'
operator ^
'local vftable constructor closure'
operator &#124;
operator &amp;&amp;
operator &#124;&#124;
operator *=
'placement delete closure'
operator -=
虛表的mangled name是::= ??_7  ∞0 @6B@,
前綴_P用在?_PX之中. 其含義未知。
下表是RTTI相關的編碼，都是在_R后跟一個數字. 有些編碼還后跟參數.
type 'RTTI Type Descriptor'
Data type type.
'RTTI Base Class Descriptor at (a,b,c,d)'
Four encoded numbers: a, b, c and d.
'RTTI Base Class Array'
'RTTI Class Hierarchy Descriptor'
'RTTI Complete Object Locator'
函數模板實例化后，就是一個具體的函數。類模板實例化后，就是一個具體的類數據類型。
::= ?$
模板的名字以前綴?$開始。?$  可以代替，?$  可以代替。
模板實參(template argument)，可以分為類型名字(typename)與非類型(non-type)的常量兩類。如果是類型名字或類作為模板實參，那么其編碼格式詳見類型的編碼表示。如果模板實參是常量(constant)，則已知的編碼格式列為下表：
anonymous type template parameter x ('template-parameter-x')
實數值a × 10b-k+1, where k是無符號整數a的十進制的位數
anonymous type template parameter a ('template-parametera')
2-tuple {a,b} (unknown)
3-tuple {a,b,c} (unknown)
anonymous non-type template parameter a ('non-type-template-parametera')
上表中，用''a'', ''b'', ''c''表示有符號整數，而''x'', ''y'', ''z''表示無符號整數. 這些有符號整數或無符號整數的編碼格式，詳見數的編碼。上表中，實數值的編碼表示$2ab，a、b都是有符號整數，但計算實數的值時，實際上規范到以10為基數的科學計數法的表示形式。
template class one{
one one1; // mangled as ?one1@@3V?$one@H@@A
//3V...@A表示這是一個全局的類對象，其中的@是類的編碼的結束標志；
//類名為one，編碼是?$one@H@，其中one@是模板的名字，
//H是模板實參int，其后的@是模板實參表結束標志
class Ce{};
one another; /* mangled as ?another@@3V?$one@VCe@@@@A */
//注意，倒數第1個@表示整個(模板實例)類的結束；
//     倒數第2個@表示模板實參表的結束；
//     倒數第3個@表示類Ce的限定情況的結束(此處限定為空，即Ce的作用域是全局)；
//    倒數第4個@表示類名碼串的結束
編號名字空間(numbered namespace)用于指出函數靜態局部變量包含在函數的哪個內部作用域中。之所以需要引入編號名字空間，是為了區分函數內部的不同作用域，從而可以區分包含在不同作用域中但同名的變量，詳見下例。其編碼格式為前綴?后跟一個無符號數，無符號數的編碼參見數的編碼小節。
特例情況是, 以?A開始的編號名字空間, 是('anonymous namespace').
int func
static int i;	// mangled as ?i@?1??func@@YAHXZ@4HA  內部表示為`func'::`2'::i
// ?1表示第2號名字空間；?func@@YAHXZ@是函數的mangled名字；4表示靜態局部變量
static int i; // mangled as ?i@?2??func@@YAHXZ@4HA  內部表示為`func'::`3'::i
// ?3表示第3號名字空間
在對一個名字做mangling時，用簡寫方法表示非首次出現的同一個名字或同一個類型。整個簡寫過程需要對ASCII碼串做3次掃描處理：
# 對函數或函數指針的形參表中的重復出現的參數數據類型的編碼簡寫；
# 把第一步獲得結果中重復出現的名字的編碼簡寫；
# 把第二步獲得的結果中的模板實例化(模板名字+模板實參表)內部重復出現的名字的編碼簡寫。
這適用于函數與函數指針的形參列表。只有編碼超過一個字符的類型參與簡寫，包括指針、函數指針、引用、數組、bool、__int64、class、實例化的模板類、union、struct、enum等數據類型。形參表中前10種多字符編碼的類型按照出現次序依次編號為0,1,...,9。用單個字符編碼的類型不參加編號。對不是該數據類型首次出現的形參，用該類型的單個數字的編號代替該數據類型的多個字符的編碼來簡寫表示。排在前十名之后的多字符編碼的數據類型，不再簡寫。函數的返回值類型不參與此編號及簡寫。
如果函數的返回類型或者形參是函數指針型，那么函數指針型的形參也參與類型排序編號與簡寫，但函數指針型的返回值類型不參與類型排序編號與簡寫。在對類型排序編號時，先編號函數指針型內部的形參的數據類型，再編號函數指針型本身。例如，假如函數的第一個形參是void (__cdecl*)(class alpha, class beta)，那么class alpha編號為0, class beta編號為1, 最后整個函數指針編號為2.
bool ExampleFunction (int*a, int b, int c, int*d, bool e, bool f, bool*g);
// mangled as ?ExampleFunction@@YA_NPAHHH0_N1PA_N@Z
//  其中，_N為返回類型bool，不參與類型簡寫，不參與編號排序；
//  類型的排序編號：int*為0，bool為1，bool*為2。
//  int的編碼為單字符H，因此不參與編號
//  第3個形參不簡寫，仍為H；第四個形參簡寫為0，第五個形參簡寫為1 */
typedef int* (*FP)(int*); /* 該函數指針類型編碼為 P6APAHPAH@Z */
FP	funcfp (int *, FP) /* mangled as ?funcfp@@YAP6APAHPAH@Z0P6APAH0@Z@Z */
//  其中P6A為函數指針類型的編碼前綴
//  其中共出現了5次int* (編碼為PAH)
//  第1次為funcfp的返回值類型FP的返回值類型，不參與排序編號與簡寫；
//  第2次為funcfp的返回值類型FP的形參，參與排序編號，編號為0，
//       因為是該類型int*的首次作為形參出現，不簡寫，仍編碼為PAH
//  第3次為funcfp的第一個形參，簡寫為0；
//  第4次為funcfp的第二個形參的返回值類型，不參與排序編號與簡寫；
//  第5次為funcfp的第二個形參的參數，簡寫為0
{return 0;}
在對碼串完成重復出現的類型的簡寫后，再對結果中所有不同的名字排序編號，從0編號到9。排在前10個之后的名字不再編號、簡寫。這里的名字是指函數、class、struct、union、enum、實例化的帶實參的模板等等的以@作為結尾后綴的名字。例如，在alpha@?1beta@@(即beta::'2'::alpha)中, 0指代alpha@, 1指代beta@，?1是編號名字空間‘2’的編碼. 特殊名字、編號名字空間的名字都不參加此輪名字的排序編號與簡寫。
class C1{
class C2{};
union C2{};
void func(C2,C1::C2) /* mangled as ?func@@YAXTC2@@V1C1@@@Z */
//其中，func的形參表是TC2@@V1C1@@@
//TC2@@是第一個形參union C2；
//V1C1@@是第二個形參C1::C2，其中V表示這是class，
//首個1表示是編號為1的名字(即C2@)重復出現，隨后的C1@表示C2的限定域為C1
//隨后的@表示限定域的嵌套結束。注意，該字串中編號為“0”的名字是func@
對于實例化模板，模板名字后跟模板實參作為一個整體視作一個名字，參加此輪排序編號與簡寫。而模板實參表中的參數序列，單獨處理它的編號及簡寫。例如：
template class tc{
public: void __stdcall func(tc){};
tc ins;
ins.func(ins); /* tc::func(tc) mangled as ?func@?$tc@H@@QAEXV1@@Z */
//其中，?$tc@H@表示實例化的類模板tc，里面的H表示模板實例化的實參是整型
//Q表示public的成員函數；A表示非只讀成員函數；E表示thiscall
//X表示函數返回類型void；
//V1@表示形參為一個class，class的名字為''1''號名字，本例中即tc的編碼?$tc@H@；
//注意，本例中''0''號名字是函數名，即func@
//最后一個@表示函數的形參表結束；Z表示缺省的exception specification
模板實例化的名字編碼，基本上就是用模板的名字與模板實參作為一個整體，當作或使用。因此模板實例化的名字在參與完成重復出現的類型簡寫與重復出現的名字簡寫兩步處理之后，再單獨處理模板實例化的模板實參表，對其內部重復出現的名字的編號與簡化。其方法與重復出現的名字簡寫的處理相同。
public: void __stdcall func(tc p1,tc p2){};
ins.func(ins,ins);  /* void tc::func(tc,tc)
mangled as ?func@?$tc@VCe@@V1@@@QAGXV1@0@Z */
//?$tc@VCe@@V1@@表示實例化的類模板tc，其中的V1@是類模板的實參的重復名字簡寫；
//函數func的作用域是tc,即tc::func編碼為func@?$tc@VCe@@V1@@@  ；
//V1@表示成員函數func的第一個形參為一個類，類名為''1''號名字，本例中即tc，這是重復名字的簡寫；
//0表示該函數func的第二個形參與形參表中的''0''號形參相同，即tc，這是重復類型的簡寫
class class1{
public:  class class2{} ee2;
union class2{};
template  void func( T1,T2,T3 ){}
class1 a;
class2 b;
func(b,a.ee2,b);
/* func(class2,class1::class2,class2)
mangled as ??$func@Tclass2@@V1class1@@T1@@@YAXTclass2@@V0class1@@0@Z  */
//如果不簡寫: ??$func@Tclass2@@Vclass2@class1@@Tclass2@@@@YAXTclass2@@Vclass2@class1@@Tclass2@@@Z
//    首先對函數的形參表中重復的類型簡寫，第3個參數與第1個參數相同，以類型編號0簡寫；
//    然后對整個字串中重復的名字編號、簡寫，第1個形參中的名字‘class2@’編號為0，
//        所以函數第2個形參中的‘class2@’被簡寫為0；
//        這也說明“函數模板名+模板實參”，不作為名字參與編號及簡寫(但普通函數的名字卻是參與名字編號!)，
//        而類模板名+模板實參”卻算作單獨一個名字而參與編號及簡寫；
//      之后，對模板實例化名字，即“函數模板名+模板實參”，單獨執行重復出現的名字編號及簡寫，
//          其中的‘class2@’出現3次，后2次被簡寫為1，這也說明在模板實例化名字內部，
//          僅執行重復名字的簡寫，不執行重復類型的簡寫
public: class name9{} ee;
template  void name9 ( T p1){}
class1 vv;
name9(vv.ee); /* void name9(class1::name9)
mangled as ??$name9@V0class1@@@@YAXVname9@class1@@@Z */
// 	      此例說明模板實例化在做重復名字簡化時，
// 	      模板實參中的name9與模板名字name9相同，因而簡化為編號0
這里所說的類型，包括數據類型、函數指針的類型、函數模板、類模板等不需要分配內存空間的一些概念屬性。類型是數據對象與函數這兩類實體的屬性。
用于表示模板
__w64 (prefix)
Back reference即用于重復出現的類型或名字的簡寫
Type modifier (reference)
Type modifier (volatile reference)
signed char
__int8
unsigned __int8
__int16
unsigned __int16
unsigned __int32
__int64
unsigned long
unsigned __int64
__int128
Type modifier (pointer)
Type modifier (const pointer)
Type modifier (volatile pointer)
Type modifier (const volatile pointer)
void, Complex Type (coclass)
Complex Type (coclass)
Complex Type (cointerface)
... (ellipsis)
對于簡單的數據類型，其編碼往往就是一個字母。如int類型編碼為X。對各種衍生的數據類型（如指針）、復合的數據類型（如類）、函數指針、模板等，在下文中分述。
X表示void 僅當用于表示函數的返回類型、形參表的終止或指針的基類型, 否則該編碼表示cointerface. 代碼 Z (表示ellipsis)僅用于表示不定長度的形參列表(varargs).
::= $$Q
其中作為前綴，用于區分各種情況的指針、引用、數組。指針自身是const還是volatile等訪問屬性，由確定。共有八種情況：
const volatile
?, $$C
表示所指向的基類型(Referred type)是否具有const或volatile等訪問屬性，詳見小節：。
表示指針或引用的基類型(Referred type)，或數組的成員類型(element type)。其編碼詳見數據類型的編碼表示。
表示多維數組的基礎維度信息，其格式為：Y...。注意，這里使用的數字，要用Visual C++ name mangling特有的數字編碼方法，詳見數的編碼。可見，C++語言的數組是對連續存儲數據的內存的直接隨機訪問(random access)的手段；因此一維數組視作指針，數組訪問是否越界，完全由編程者負責；而對多維數組，必須知道除了第一維之外其它各維的長度，才能做到直接隨機訪問，所以多維數組作為函數形參時，必須已知其除了第一維之外其它各維的長度（以及總的維數），這些信息都被編入了數組的mangled name中。
對于函數指針類型的編碼，其為函數調用接口信息，包括使用的調用協議、返回值類型、形參類型、允許拋出的異常等，詳見函數指針類型的編碼。類成員指針的類型編碼，詳見類成員指針的類型編碼。類成員函數指針的類型編碼，詳見類成員函數指針的類型編碼。
2003年x86-64位處理器問世后，第一批64位Windows平臺的C++編譯器曾經使用_O作為數組類型的前綴修飾符(type modifier). 但不久就改回了32位Windows平臺C++編譯器使用的P前綴.
需注意的是，全局數組類型被編碼為P(指針型)，同時作為函數形參的數組類型被編碼為Q(常量指針). 這與其本來含義恰恰相反——全局數組型的變量名字表示某塊內存地址，該名字不能再改為指向其它內存地址；而作為函數形參的數組型變量的名字所表示的內存地址是可以修改的。但數組類型這種編碼方法已經被各種C++編譯器廣泛接受。顯然，這是為了與老的代碼保持向后兼容。例如：
int ia10;                                 //ia是數組類型的非函數形參的變量
int main(int argc, char *argv) //argv是數組類型的形參, 其類型為 (char *)
int j=*(ia++);                              //編譯錯誤！ia是只讀的lvalue，不能完成地址的++操作
char *c= *(argv++);                         //編譯正確！argv是可以修改的lvalue
typedef int * p1; // coded as PAH 其中P表示default訪問屬性的指針，
//A表示對基類型的default訪問屬性，H表示基類型為int
typedef const int * p2; //coded as PBH 其中B表示基類型的const訪問屬性
typedef volatile int *p3; //coded as PCH 其中C表示基類型的volatile訪問屬性
typedef volatile const int *p4; //coded as PDH 其中D表示基類型的const volatile訪問屬性
typedef int * const p5; //coded as QAH 其中Q表示是const pointer
typedef int * volatile p6; //coded as RAH 其中R表示是volatile pointer
typedef int * const volatile p7; //coded as SAH 其中S表示是const volatile pointer
typedef volatile int * const p6; //coded as QCH 例如這是一個外部IO設備輸入數據的內存地址
typedef int &r1; // coded as AAH 其中第一個A表示左值引用類型(l-value reference type)
typedef int&& r2; //coded as $$QAH 其中$$Q表示是右值引用類型(r-value reference type)
typedef const int&& r3; //coded as $$QBH 其中B表示基類型是const屬性
typedef int8 a1; // global array coded as PAH
typedef int108 a2; //global array coded as PAY07H 其中Y標志多維數組，0是(維數-1)即1的編碼
// 7是第二維長度8的編碼
typedef int4165 a3; //global array coded as PAY1BA@4H 其中1為(維數-1)即2的編碼
//BA@是第二維長度16的編碼(16進制的10)，4是第3維長度5的編碼
int76 // 作為函數形參時，該數據類型編碼為 QAY05H
函數指針的類型信息，包括函數返回類型，函數形參類型，調用協議等。以前綴P6開始。各項具體定義可參見函數的類型信息編碼：
一般地，取值為P，意為指針；取值為6，意為指針的基類型為near屬性的非成員函數。
typedef const  int (__stdcall *FP) (int i); /* coded as P6G?BHH@Z */
//                                         其中?B表示為const
指向類成員的指針，其編碼為
其中各項的定義詳見指針、引用、數組的類型編碼。注意，是指基類型的屬性，常用的值為：Q for default， R for const; S for volatile; T for const volatile。
typedef int C1::*p; // coded as PQC1@@H
類成員指針(pointer to member)的名字mangling的最末尾處對基類型訪問屬性的編碼不同于普通的指針，要在最后加上所指向類的帶完整限定信息的名字：
::= ? &lt;data access modifier&gt;
有的文獻稱，類成員指針、類成員函數指針的name mangling都必須以Q1@作為結尾，以替代。從下述幾例可以看出，這種說法是錯誤的。Q是對所指向的成員類型使用default訪問屬性，這是最常見的情況。1是該指針所指向類的名字簡寫，因為在此位置之前該類的名字必然已經出現在該數據類型的編碼中，所以此處名字的簡寫是必然的。但不一定總是簡寫作1
下例中，成員指針變量的mangled name以S12@結尾：
class outer{
class cde{
public: volatile int i;
volatile int outer::cde::* p; // mangled as ?p@@3PScde@outer@@HS12@
// 其中兩個S都是表示基類型為volatile屬性
// 1是cde@的簡寫
// 2是outer@的簡寫
public: int i;
C1 const *pi; // ?pi@@3PBVC1@@B 一個簡單的指針變量。作為對比
typedef  int C1::*  TP; // coded as PQC1@@H
void func(TP){
static TP ppp=0; // `func'::`2'::ppp mangled as ?ppp@?1??func@@YAXPQC1@@H@Z@4PQ2@HQ2@
//其中，?ppp@?1??func@@YAXPQC1@@H@Z@表示帶作用域限定信息的名字`func'::`2'::ppp
//4表示靜態局部變量；PQ2@H表示成員指針類型，其中的“2”是C1@的簡寫。
//注意ppp@編號為0，func@編號為1
//最后三個字符Q2@表示對基類型“2”(C1@的簡寫)的訪問屬性為Q(缺省屬性，即非const非volatile)
類成員函數的指針(pointer to member function)，遵從指針類型編碼的一般規則。但與函數指針類型的編碼相比，多了一項，表示所指的函數是否為只讀成員函數(constant member function)。
一般地，取值為P，意為指針；取值為8，意為指針的基類型為near屬性的類成員函數。其它各項取值參見函數的name mangling。
public: void foo(int) const
typedef  void (C1::*TP)(int) const; /* coded as P8C1@@BEXH@Z
其中B表示const member function; E表示thiscall */
類成員函數指針(pointer to member function)的名字mangling，對基類型訪問屬性的編碼不同于普通的指針，要在最后加上所指向類的帶完整限定信息的名字。
上述定義中，取值一般是Q
class xyz{
public: void foo(int) {};
void (xyz::*pfunc)(int) ; /* mangled as ?pfunc@@3P8xyz@@AEXH@ZQ1@ */
//                    其中Q表示對基類型的訪問屬性為default；1表示被簡寫的編號為‘1’的名字，即‘xyz@’；
//                  注意，編號為‘0’的名字是‘pfunc@’
其中復合類型的種類作為前綴，union編碼為T, struct編碼為U, class編碼為V, coclass編碼為X, cointerface編碼為Y。復合類型的帶限定的名字，是指按照名字所在的名字空間、所屬的類，逐級列出限定情況(qualifier)，詳見名字的編碼。
經常可以看到復合類型的編碼以@@兩個字符結尾，這是因為第一個@表示復合類型名字的字串結束，第二個@表示限定情況的結束(即作用域為全局，限定情況為空)。
編寫代碼時，經常要用到類的前向聲明(forward declaration)，即提前聲明這個名字是個類，但類的成員尚未給出。例如:
class myClassName; //mangled type name is VmyClassName@@
class myClassName::embedClassName; //mangled type name is VembedClassName@VmyClassName@@
::= W  @
其中，W為枚舉類型前綴詞。為枚舉類型的帶限定的名字，是指按照名字所在的名字空間、所屬的類，逐級列出限定情況(qualifier)，詳見名字的編碼。枚舉實際使用的數據類型，
對應的實際數據類型
int ''(generally normal "enum")''
enum namex:unsigned char {Sunday, Monday}; // enum-type coded as W4namex@@
看起來Visual C++已經把所有枚舉類型用int型實現，因此枚舉的基類型(The underlying type of the enumeration identifiers)的編碼總是為4
用于普通的數據對象，表示其是否具有const、volatile等訪問屬性；用于指針、數組、引用類型，則表明對基類型的訪問屬性，而指針自身是否為const、volatile等屬性，則專由編碼表示。
用于函數指針時，表示該指針所指向的基類型是函數。但與指向數據對象的普通指針不同——函數指針指向的基類型（即函數）也有自己的內存空間，只是這塊內存空間必定是只讀的、可執行的，因此函數指針所指向的基類型內存空間不存在const、volatile等訪問屬性。
的取值情況：
C, G, K
D, H, L
__based
_A, _B
Q, U, Y
R, V, Z
S, W, 0
T, X, 1
__based Member
_C, _D
可以有0個或多個前綴:
type __ptr64
__unaligned type
type __restrict
指針變量的__based屬性是Microsoft的C++語言擴展. 這一屬性編碼為:
* 0 (意味著__based(void))
* 2 (意味著__based)
* 5 (意味著沒有__based)
int *pBased;     // mangled name:  ?pBased@@3PAHA
int __based(pBased) * pBasedPtr;    // 需要注意Visual C++編譯器把這個指針變量的聲明解釋為：
//         (int __based(pBased) * __based(pBased) pBasedPtr)
//         因此其mangled name: ?pBasedPtr@@3PM2pBased@@HM21@
//       其中PM2pBased@@表示這是基于的指針；HM21表示是基于“1”的整型指針，
//       “1”是重復出現的名字的編號簡寫，這里就是指pBased@
int __based(void) *pbc; // mangled name: ?pbc@@3PM0HM0 其中的0表示這是__based(void).
//        編譯器把該變量聲明解釋為(int __based(void) * __based(void) pbc)
函數的類型信息，是指調用函數時必須考慮的ABI(Application Binary Interface)，包括調用協議、返回類型、函數形參表、函數拋出異常的說明(exception specification)等，參見函數的name mangling。
給出了函數是near或far（但far屬性僅適用于Windows 16位環境，32位或64位環境下只能函數具有near屬性）、是否為靜態函數、是否為虛函數、類成員函數的訪問級別等信息：
static near
static far
virtual near
virtual far
thunk near
thunk far
not member
上表中的thunk函數，是指在多繼承時，由編譯器生成的包裝函數(warpper function)，用于多態調用實際已被子類對應函數覆蓋(overrided)的父類虛函數，并把指向父類的this指針調整到指向子類的起始地址。
Calling Convention
__cdecl
__pascal __fortran
__pascal
__thiscall
__stdcall
__fastcall
__clrcall
64位編程時，唯一可用的調用協議的編碼是A
有多種方法，可以方便地查看一個函數在編譯后的修飾名字：
# 直接用工具軟件(如微軟開發環境提供的dumpbin)查看obj、exe等二進制文件。使用dumplib查看.obj或.lib文件時，使用"/SYMBOLS"命令行選項。
# 編譯時使用"/FAu"編譯選項，生成帶有豐富注釋信息的匯編源程序，其文件擴展名是.cod或者.asm，可以查看每個C/C++函數的修飾名字。
# 在源程序中使用微軟提供的預定義宏(Microsoft-Specific Predefined Macros)—— __FUNCDNAME__，例如：
void exampleFunction
printf("Function name: %s\n", __FUNCTION__);
printf("Decorated function name: %s\n", __FUNCDNAME__);
printf("Function signature: %s\n", __FUNCSIG__);
// 輸出為：
// -------------------------------------------------
// Function name: exampleFunction
// Decorated function name: ?exampleFunction@@YAXXZ
// Function signature: void __cdecl exampleFunction(void)
* 使用微軟Visual C++中的解析修飾名字的工具軟件undname.exe。例如：
C:\>undname.exe ??$name9@V0class1@@@@YAXVname9@class1@@@Z
Microsoft (R) C++ Name Undecorator
Copyright (C) Microsoft Corporation. All rights reserved.
Undecoration of :- "??$name9@V0class1@@@@YAXVname9@class1@@@Z"
is :- "void __cdecl name9(class class1::name9)"
* 使用Windows提供的系統調用UnDecorateSymbolName把修飾名字翻譯為未修飾名字。UnDecorateSymbolName在DbgHelp.h或imagehlp.h中聲明，在DbgHelp.dll中實現，需要使用導入庫DbgHelp.lib。Windows SDK中包含了DbgHelp.h與DbgHelp.lib。示例程序：
//UnDecorate.cpp
#include  //如果不包含此頭文件，編譯DbgHelp.h時會產生大量語法錯誤
#pragma comment(lib,"dbghelp.lib") //告訴鏈接器使用這個輸入庫
int _tmain(int argc, _TCHAR* argv)
TCHAR szUndecorateName256;
memset(szUndecorateName,0,256);
if (2==argc)
::UnDecorateSymbolName(argv1,szUndecorateName,256,0);
編譯后，執行上述程序：
C:\>UnDecorate.exe   ?apiname@@YA_NEEPAD@Z
bool __cdecl apiname(unsigned char,unsigned char,char *)
在Windows平臺上，使用dllexport關鍵字直接輸出C++函數時，DLL的用戶看到的是修飾后的函數名字. 如果不希望使用復雜的C++修飾后的函數名，替代辦法是在DLL的.def文件中定義輸出函數的別名，或者把函數聲明為extern "C".
在匯編源程序或者內聯匯編中引用了C/C++函數，就必須引用該函數的修飾名字。
鋁酸鍶或偏鋁酸鍶（化學式：SrAl2O4）是一種白色或無色且不可燃的無機化合物，密度比水較大，化學性質不活潑，它的一個重要用途是用于熒光材料上，這種發光材料通常被標記為：SrAl2O4：Eu2+；SrAl2O4：Eu2+，Dy3+等，它們分別表示為被銪激活的鋁酸鍶和被銪鏑共激活的鋁酸鍶，在被紫外線或可見光的照射后放置在黑暗環境中就可發出熒光。
除了偏鋁酸鍶SrAl2O4外，還存在SrAl4O7（單斜）、Sr3Al2O6（立方）、SrAl12O19（六方）、Sr4Al14O25（正交）等鍶的鋁酸鹽。
牙買加代表團旗幟
2011年夏季世界大學生運動會牙買加代表團是牙買加所派出的2011年夏季世界大學生運動會代表團，該代表團共派出12名代表參賽。
#男子鉛球：理查德斯
#女子200米：安妮莎·麥克勞林
#男子200米：拉錫德-德維耶
#女子100米：卡麗·羅素
#男子100米：哈維
#男子200米決賽：賈森-楊
#男子400米：彼得·馬修斯
J波蘭代表團旗幟
2011年夏季世界大學生運動會波蘭代表團共有173名成員。
#柔道-女子52公斤級：蘇珊娜-帕維利科斯加
#男子鏈球：帕維爾
#女子鐵餅：格拉妮可
#男子沙灘排球：卡齊奧拉/紹蘭科維齊
#男子撐桿跳高：米哈爾斯基
#柔道-男子100公斤以上級：薩爾納克基
#擊劍-女子花劍團體
#男子跳高：沃伊切赫
#男子飛碟多向125靶個人賽：加克波-切賓斯基
#男子撐桿跳高：馬特茲
#帆船-男子RS:X級：法比安斯基
#男子鐵餅：普澤米斯拉瓦
#女子個人花劍：克里奇扎洛
#柔道-男子73公斤級：庫基維茨
#柔道-女子團體
#男子100米蝶泳：科熱尼奧夫斯基
#射擊-男子50米手槍團體賽
#射擊-男子飛碟多向團體賽
#男子標槍：伊戈爾
#帆船-女子RS:X級：馬烏戈
邱寶仁，字彪臣，福建省閩侯縣人。
同治六年(1867年)，考入福建船政學堂，為該學堂第一屆駕駛班學生。
同治十年(1871年)夏，經大考合格，堂課畢業。旋登建威號練習艦實習，先後巡歷北洋、香港、新加坡、檳榔嶼各口岸，閱歷大增。
光緒元年(1875年)，復上揚威號練習艦赴新加坡、菲律賓、日本各海口巡歷。
光緒二年（1876年），北洋在英國訂購蚊炮船「龍驤號」、「虎威號」來華，邱寶仁管帶「虎威」，並會同來華的英國官兵將炮船駛至福建船政局，募選管輪、管炮、舵勇、水手。
光緒三年（1877年），率「虎威」隨「龍驤」赴澎湖駐防。
光緒五年(1879年)，南洋水師在英國訂購 「鎮東號」；「鎮西號」、「鎮南號」、「鎮北號」4艘蚊炮船來華，李鴻章將此4船留歸北洋，而將「虎威」等4艘舊船劃歸南洋。邱寶仁奉命調管「鎮東」號，積功擢守備。
光緒六年(1880年)夏，「鎮東」等4炮船巡遊黃海，至海洋島。「鎮南號」不慎觸礁，旋即脫險。事後，邱寶仁因「救援不力」，被「撤革摘頂，以示懲戒」。.
光緒十一年(1885年)，北洋在德國訂購的鐵甲艦「定遠號」、「鎮遠號」及巡洋艦「濟遠號」啟程回國，李鴻章派寶仁隨劉步蟾等赴德國，分駐各艦，沿途照料。
光緒十三年 (1887年)春，在英、德兩國訂購的「致遠號」、「靖遠號」、「經遠號」、「來遠號」4艘巡洋艦竣工，邱寶仁奉派赴德國管駕「來遠」艦駛回。因接船有功， 賞勁勇巴圖魯勇號，充「來遠」艦管帶。
光緒十五年(1889年)初，李鴻章為新建成的北洋海軍揀員補署要缺，奏準以邱寶仁升署右翼左營副將，仍委帶「來遠」艦。
光緒十七年(1891年)，李鴻章為辦理海軍出力人員請獎，寶仁賞換喀勒崇依巴圖魯勇號。
光緒十八年（1892年）三月，署缺三年期滿，照章改為實授。
光緒二十年(1894年)，甲午戰爭爆發。八月十八日，北洋海軍主力在黃海北部的鴨綠江口大東溝附近海域與日本聯合艦隊遭遇，展開一場海上鏖戰。邱寶仁指揮「來遠」艦官兵奮勇擊敵，重創日艦「赤城」。戰至下午3時20分以後，日本第一游擊隊「吉野」等4艦合力圍攻「來遠」、「靖遠」。2艦以寡敵眾苦戰， 均受重傷。「來遠」艦中彈200多顆，引起猛烈大火，延燒房艙數十間。尾炮被毀，僅以首炮應戰。邱寶仁下令撤離戰場，駛至大鹿島附近施救。「艙面人員悉忙於消防，因通氣管有引火之虞，亦為解除。機艙熱度增至二百度，而艙內人員猶工作不息。及火災消弭之後，機艙人員莫不焦頭爛額。」接著，寶仁又率「來遠」駛回作戰海域，繼續參加戰鬥。不久，海戰結束，寶仁又指揮全艦官兵齊心協力，將已受重傷的「來遠」艦安全駛回基地。「駛回旅順之際，中西各人見其傷勢沉重，而竟安然返旆，無不大奇之。」。
光緒二十一年(1895年)初，日軍水陸夾擊威海港內的北洋海軍。正月十二日凌晨，日本魚雷艇潛入港內偷襲，「來遠」艦中雷翻轉，迅即沉沒。艦上30餘人遇難，「管帶邱彪臣及其將弁、水手計五十餘人均遇救」。北洋海軍全軍覆沒後，邱寶仁被革職，聽候查辦。此後再未復出。
「邱寶仁傳」，蘇小東，馬昌華編.《淮系人物列傳：文職·北洋海軍·洋員》.黃山書社,1995年12月第1版.第309-310頁
青州博物館位于中國山東省青州市，是一座綜合性地志博物館，2008年被國家文物局評為“國家一級博物館”，是惟一一家縣級國家一級博物館。
1959年益都縣博物館掛牌成立，館址設在偶園內的馮氏宗祠。1984年異地重建，新館為仿古建筑群，占地3萬平方米，建筑面積12000平方米，陳列面積達7000平方米。1986年因益都縣撤縣設青州市，遂改稱青州博物館。現有館藏文物四萬余件，其中三級以上文物2000余件，鎮館之寶有明朝趙秉忠的殿試卷、東漢“宜子孫”玉璧、戰國玉人、龍興寺遺址出土的佛教造像等。現每年接待游客25萬人次。
*  青州市文物事業管理局|青州市博物館
潛水支援船一號
潛水組（英文：Diving Unit）前身為潛水隊（英文：Diving Team），隸屬於香港消防處港島、離島及海務區消防總區，其主要責任為負責於香港海域以至其他水底壓縮環境（例如池塘、水塘、、污水渠及沉船等）執行水底搜索及潛水拯救任務；潛水組亦參與香港水域外的相關任務；每年平均出動近600次，當中包括近300宗遇溺和170宗船難。此外，潛水組負責為消防處及其他政府部門提供相關訓練。
*潛水組：由一名消防區長出任主管。
**行動隊：分為4支小隊，被派遣駐守於望后石消防局、西貢消防局、銅鑼灣消防局以及消防處潛水基地
***行動隊1：由一名助理消防區長領導。
***行動隊2：由一名助理消防區長領導。
***潛水行動支援及訓練專隊：於2013年3月13日成立，為消防處及其他政府部門提供相關訓練（包括多種潛水訓練、水上自救訓練、基礎急流拯救訓練及加壓特遣隊訓練等等。）、支援大型或者複雜的水底搜索及潛水拯救行動，並且負責操作消防處潛水基地加壓室，訓練人員，及為醫院管理局為患有減壓病的病人進行加壓治療及為接受了器官移植的病人進行高壓氧治療。潛水行動支援及訓練專隊被分為小隊，人員24小時輪值。
消防處的專業潛水拯救服務歷史可以追溯至1955年8月15日，一名小童於九龍一處集水區遇溺，消防人員到場後隨即使用純氧呼吸輔助器，潛入近15呎深的水底，可惜不果，被逼終止行動。兩年後的10月6日，兩名小童於喇沙利道附近的一個水池遇溺，不幸地只有其中1名小童獲救。綜合上述兩次事件，消防處故訓練專業人員，同時購買相關裝備，以應付日後的需要。
1960年，潛水隊成立，由20名人員所組成，被派遣駐守於香港島及九龍的緊急裝備供應車隊服役。
1970年代中期，潛水隊添置了Poseidon水中呼吸輔助器，使潛水能力擴展至15米水深。於1989年，潛水拯救車輛正式服役；翌年，潛水隊添置了雙樽Poseidon水中呼吸輔助器，使潛水能力擴展至30米水深。
1992年，潛水組成立以取代潛水隊，全數崗位均為全職形式出任。此時，潛水能力擴展至42米水深。
於香港回歸後，原本由駐港英軍海軍所負責的深海潛水服務由消防處接替。故此，在消防處處長授權下，潛水組可以在香港水域以外進行水底搜索及潛水拯救等行動。
2000年，潛水組添置了兩艘潛水搶救快艇，協助運送人員於短時間內抵達事故現場。兩年後，潛水組添置了潛水支援船，進一步地提高效率。
2011年，潛水組共出動653次。