📄 标准名字空间的理解 - 交大蓝盾 blog - powered by phpwind_net.htm
字号:
style="FONT-SIZE: 0pt">AQmwN ZvrU </SPAN> <BR>{ <SPAN class=copyctrl
style="FONT-SIZE: 0pt">y/ZNNrlr </SPAN> <BR>/******/ <SPAN class=copyctrl
style="FONT-SIZE: 0pt">(_*c@ </SPAN> <BR>} <SPAN class=copyctrl
style="FONT-SIZE: 0pt">pa9moTL </SPAN> <BR>const double pi = 3.1416;
<SPAN class=copyctrl style="FONT-SIZE: 0pt">^aP\V@g+ </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">$@!}RrO~m- </SPAN> <BR>} <SPAN
class=copyctrl style="FONT-SIZE: 0pt">1iO{9oWUzG </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">R7cIE </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">H0ylm|kJ
</SPAN> <BR>在名字空间cplusplus_primer中声明的类的名字是 <SPAN class=copyctrl
style="FONT-SIZE: 0pt">{s2S>:JDNg </SPAN> <BR>cplusplus_primer::matrix
<SPAN class=copyctrl style="FONT-SIZE: 0pt">P>Qi66be:B
</SPAN> <BR>函数的名字是 <SPAN class=copyctrl style="FONT-SIZE: 0pt">IUV]cNX
</SPAN> <BR>cplusplus_primer::inverse() <SPAN class=copyctrl
style="FONT-SIZE: 0pt">Ag!6H </SPAN> <BR>常量的名字是 <SPAN class=copyctrl
style="FONT-SIZE: 0pt">FC{OeBr+ </SPAN> <BR>cplusplus_primer::pi <SPAN
class=copyctrl style="FONT-SIZE: 0pt">]@x5f6tZ </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">*,aR`-jv
</SPAN> <BR>类,函数,常量被声明它的名字空间的名字限定修饰: <SPAN class=copyctrl
style="FONT-SIZE: 0pt">lR6H G$X </SPAN> <BR>这些名字被成为限定修饰符(qualified name)
<SPAN class=copyctrl style="FONT-SIZE: 0pt">TF^~zHo|MT </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">zCU ;~$ </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">yKkWmo ~z%
</SPAN> <BR>名字空间的定义不一定是连续的.例如 <SPAN class=copyctrl
style="FONT-SIZE: 0pt">/H~tOY=S </SPAN> <BR>namespace cplusplus_primer{
<SPAN class=copyctrl style="FONT-SIZE: 0pt">hH"o% </SPAN> <BR>class
matrix {/*****/} <SPAN class=copyctrl style="FONT-SIZE: 0pt">7U>g 6#
</SPAN> <BR>const double pi = 3.1416; <SPAN class=copyctrl
style="FONT-SIZE: 0pt">]MC1"{_qT </SPAN> <BR><SPAN class=copyctrl
style="FONT-SIZE: 0pt">+3? ` </SPAN> <BR>} <SPAN class=copyctrl
style="FONT-SIZE: 0pt">@_L ?FHh </SPAN> <BR><SPAN class=copyctrl
style="FONT-SIZE: 0pt">(Ks>cv < </SPAN> <BR>namespace
cplusplus_primer{ <SPAN class=copyctrl style="FONT-SIZE: 0pt">rguI? h#
</SPAN> <BR>void inverse(matrix &); <SPAN class=copyctrl
style="FONT-SIZE: 0pt">6%}d\h </SPAN> <BR>matrix operator+ (const
matrix &m1,const matrix &m2) <SPAN class=copyctrl
style="FONT-SIZE: 0pt">44o </SPAN> <BR>{/********/} <SPAN
class=copyctrl style="FONT-SIZE: 0pt">qyk| '$J </SPAN> <BR>} <SPAN
class=copyctrl style="FONT-SIZE: 0pt">xi>COB|tqk </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">;2z|t,.
</SPAN> <BR>名字空间的定义可是非连续的,这对生成一个库很有帮助,它使我们更容易将库的源代码组织成 <SPAN class=copyctrl
style="FONT-SIZE: 0pt">>#mlz2; </SPAN> <BR>接口和实现部分。 <SPAN
class=copyctrl style="FONT-SIZE: 0pt">,F9g` </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">zC\n< </SPAN> <BR>2、域操作符
<SPAN class=copyctrl style="FONT-SIZE: 0pt">zyB}:~ </SPAN> <BR>:: <SPAN
class=copyctrl style="FONT-SIZE: 0pt">C6 1@Di[z
</SPAN> <BR>用户声明的名字空间成员名自动被加上前缀,名字空间名后面加上域操作符(::),名字空间成员名 <SPAN
class=copyctrl style="FONT-SIZE: 0pt">D OzP4H<
</SPAN> <BR>由该名字空间名进行限定修饰。 <SPAN class=copyctrl
style="FONT-SIZE: 0pt">:v^o@si </SPAN> <BR><SPAN class=copyctrl
style="FONT-SIZE: 0pt">chVC3 H2Y
</SPAN> <BR>名字空间成员的声明被隐藏在其名字空间中,除非我们为编译器指定查找的声明的名字空间,否则 <SPAN
class=copyctrl style="FONT-SIZE: 0pt">DI0"BTXEXq
</SPAN> <BR>编译器将在当前域及嵌套包含当前域的域中查找该名字的声明。 <SPAN class=copyctrl
style="FONT-SIZE: 0pt">80G;+3S </SPAN> <BR><SPAN class=copyctrl
style="FONT-SIZE: 0pt">S"K *> </SPAN> <BR>注意!!! <SPAN class=copyctrl
style="FONT-SIZE: 0pt">@${=)D|1%
</SPAN> <BR>域操作符也可以被用来引用全局名字空间的成员。因为全局名字空间没有名字。 <SPAN class=copyctrl
style="FONT-SIZE: 0pt">>x J<pSlG </SPAN> <BR>::member_name <SPAN
class=copyctrl style="FONT-SIZE: 0pt">v)~'8~s </SPAN> <BR>指的是全局名字空间的成员。
<SPAN class=copyctrl style="FONT-SIZE: 0pt">2O"Y%>Gf </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">8OKO^ </SPAN> <BR>#include
<iostream> <SPAN class=copyctrl style="FONT-SIZE: 0pt">u_x. h'J
</SPAN> <BR>const int max = 65000; <SPAN class=copyctrl
style="FONT-SIZE: 0pt">TmUx&Flj| </SPAN> <BR>const int lineLength =
12; <SPAN class=copyctrl style="FONT-SIZE: 0pt">6Xq Ig#2W
</SPAN> <BR><SPAN class=copyctrl style="FONT-SIZE: 0pt">:hMp%4h{p
</SPAN> <BR>void fibonacci(int max) <SPAN class=copyctrl
style="FONT-SIZE: 0pt">J<LP2K,5 </SPAN> <BR>{ <SPAN class=copyctrl
style="FONT-SIZE: 0pt">+.V-5 </SPAN> <BR>if (max <2) return; <SPAN
class=copyctrl style="FONT-SIZE: 0pt">va$TWa<7oT </SPAN> <BR>cout
<< "0 1"; <SPAN class=copyctrl style="FONT-SIZE: 0pt">S$PCb>O
</SPAN> <BR>int v1 = 0,v2=1,cur; <SPAN class=copyctrl
style="FONT-SIZE: 0pt">u(_f/O{6/I </SPAN> <BR>for (int ix=3;ix <=
max;++ix) <SPAN class=copyctrl style="FONT-SIZE: 0pt">mg4A @b=
</SPAN> <BR>{ <SPAN class=copyctrl style="FONT-SIZE: 0pt">#+3vmz7d
</SPAN> <BR>cur = v1+v2; <SPAN class=copyctrl style="FONT-SIZE: 0pt">x1@\|=
C^ </SPAN> <BR>if(cur>::max) break; //引用全局名字空间的变量; <SPAN class=copyctrl
style="FONT-SIZE: 0pt">MOjBHLpW </SPAN> <BR>cout << cur <<"";
<SPAN class=copyctrl style="FONT-SIZE: 0pt">1d`AQd[ </SPAN> <BR>v1=v2;
<SPAN class=copyctrl style="FONT-SIZE: 0pt">o~K.s<!AG
</SPAN> <BR>v2=cur; <SPAN class=copyctrl style="FONT-SIZE: 0pt">P_DYane
</SPAN> <BR>if(ix % lineLength ==0) cout << endl; <SPAN
class=copyctrl style="FONT-SIZE: 0pt">60CD.19" </SPAN> <BR>} <SPAN
class=copyctrl style="FONT-SIZE: 0pt">Wk4.%t\^d </SPAN> <BR>} <SPAN
class=copyctrl style="FONT-SIZE: 0pt">OVtXslX </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">?+qD 0uY </SPAN> <BR>3 、嵌套名字空间
<SPAN class=copyctrl style="FONT-SIZE: 0pt">G"r?V $g </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">giR=(0 </SPAN> <BR>。。。。。 <SPAN
class=copyctrl style="FONT-SIZE: 0pt">7Y=eXy]U </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">Vua0Nofo </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">Lt?"GZWQS </SPAN> <BR>4 使用名字空间成员
<SPAN class=copyctrl style="FONT-SIZE: 0pt">V 81%G^S? </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">AxqF}X L
</SPAN> <BR>使用限定修饰的名字形式namespace_name::member_name来引用名字空间,毫无疑问是非常麻烦的。 <SPAN
class=copyctrl style="FONT-SIZE: 0pt">`dcL] </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">Sfqz e </SPAN> <BR>using
声明,using指示符 <SPAN class=copyctrl style="FONT-SIZE: 0pt">Ur ?|DI
</SPAN> <BR><SPAN class=copyctrl style="FONT-SIZE: 0pt">#zF&L
</SPAN> <BR>5 名字空间别名 <SPAN class=copyctrl style="FONT-SIZE: 0pt">+cYltRUP
</SPAN> <BR><SPAN class=copyctrl style="FONT-SIZE: 0pt">FN,-o5nJh
</SPAN> <BR>namespace International_Business_Machines <SPAN class=copyctrl
style="FONT-SIZE: 0pt">2*qPX$j </SPAN> <BR>{/*********/} <SPAN
class=copyctrl style="FONT-SIZE: 0pt">E%%J`A </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">Nj(SF md </SPAN> <BR>namespace IBM
= International_Business_Machines; <SPAN class=copyctrl
style="FONT-SIZE: 0pt">]GH^Q =@ </SPAN> <BR><SPAN class=copyctrl
style="FONT-SIZE: 0pt">-sKC>m </SPAN> <BR>6、 using声明 <SPAN
class=copyctrl style="FONT-SIZE: 0pt">{ %JD$4ff </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">l73+|J@"b; </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">lt[uyGVS~ </SPAN> <BR>namespace
cplusplus_primer <SPAN class=copyctrl style="FONT-SIZE: 0pt">*hw],@`
</SPAN> <BR>{ <SPAN class=copyctrl style="FONT-SIZE: 0pt">n2lo/3Kbm
</SPAN> <BR>namespace MatrixLib <SPAN class=copyctrl
style="FONT-SIZE: 0pt">gDbS#z </SPAN> <BR>{ <SPAN class=copyctrl
style="FONT-SIZE: 0pt">>Ks3)rSgt </SPAN> <BR>class matrix {/******/};
<SPAN class=copyctrl style="FONT-SIZE: 0pt">G2u/%(Hv+ </SPAN> <BR>} <SPAN
class=copyctrl style="FONT-SIZE: 0pt">FvVmUf9, </SPAN> <BR>} <SPAN
class=copyctrl style="FONT-SIZE: 0pt">o*T$e2Xzs. </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">;U|*0T0`L, </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">,`+/ <dp9 </SPAN> <BR>using
cplusplus::MatrixLib::matrix; <SPAN class=copyctrl
style="FONT-SIZE: 0pt">.}_'JTGO </SPAN> <BR><SPAN class=copyctrl
style="FONT-SIZE: 0pt">JcW8x /E </SPAN> <BR><SPAN class=copyctrl
style="FONT-SIZE: 0pt">Cpcp(`@ </SPAN> <BR><SPAN class=copyctrl
style="FONT-SIZE: 0pt">OY``OH|bo </SPAN> <BR><SPAN class=copyctrl
style="FONT-SIZE: 0pt">? K'X{;N </SPAN> <BR>using 声明引入的名字有以下特性: <SPAN
class=copyctrl style="FONT-SIZE: 0pt">p}(_X%/ </SPAN> <BR>1>
它在该域中必须唯一。 <SPAN class=copyctrl style="FONT-SIZE: 0pt">\Z:6!g>R?
</SPAN> <BR>2> 由外围域中声明引入的相同名字被其隐藏。 <SPAN class=copyctrl
style="FONT-SIZE: 0pt">Vf1z6_l79 </SPAN> <BR>3> 它被嵌套域中的相同名字的声明隐藏。 <SPAN
class=copyctrl style="FONT-SIZE: 0pt">kb|pbjnnB </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">b1HS) <; </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">"U1AHMMN </SPAN> <BR>namespace blip
{ <SPAN class=copyctrl style="FONT-SIZE: 0pt">{9^y0Yu@` </SPAN> <BR>int bi
= 16,bj = 15, bk = 23; <SPAN class=copyctrl style="FONT-SIZE: 0pt">6c=miCM~01
</SPAN> <BR><SPAN class=copyctrl style="FONT-SIZE: 0pt">v,EF3Q
</SPAN> <BR>} <SPAN class=copyctrl style="FONT-SIZE: 0pt">{elb/VrpV
</SPAN> <BR><SPAN class=copyctrl style="FONT-SIZE: 0pt">%+] MNH
</SPAN> <BR>int bj = 0; <SPAN class=copyctrl
style="FONT-SIZE: 0pt">x-& }q}f </SPAN> <BR><SPAN class=copyctrl
style="FONT-SIZE: 0pt">X5$d4xS </SPAN> <BR>void mainip() <SPAN
class=copyctrl style="FONT-SIZE: 0pt">B}!EnHqP </SPAN> <BR>{ <SPAN
class=copyctrl style="FONT-SIZE: 0pt">DJK6N\ </SPAN> <BR>using
blip::bi; //函数mainip()中的bi指向blip::bi <SPAN class=copyctrl
style="FONT-SIZE: 0pt">>D>D}IS| </SPAN> <BR>++bi; //设置blip::bi为17
<SPAN class=copyctrl style="FONT-SIZE: 0pt">ntcO85d </SPAN> <BR>using
blip::bj //隐藏全局域中的bj <SPAN class=copyctrl style="FONT-SIZE: 0pt">P J8 fa
</SPAN> <BR>++bj; <SPAN class=copyctrl
style="FONT-SIZE: 0pt">>&nQ </SPAN> <BR>int bk; //bk在局部域中声明
<SPAN class=copyctrl style="FONT-SIZE: 0pt">} \B/AC </SPAN> <BR>using
blip:bk; //错误:在mainip()中重复定义bk <SPAN class=copyctrl
style="FONT-SIZE: 0pt">BZ575 </SPAN> <BR><SPAN class=copyctrl
style="FONT-SIZE: 0pt">P&VNMv </SPAN> <BR><SPAN class=copyctrl
style="FONT-SIZE: 0pt">f}qDZ*F </SPAN> <BR>} <SPAN class=copyctrl
style="FONT-SIZE: 0pt">uME #O: </SPAN> <BR><SPAN class=copyctrl
style="FONT-SIZE: 0pt">C$.U<%M+ </SPAN> <BR>int wrongInit = bk;
//错误:bk在这里不可见 <SPAN class=copyctrl style="FONT-SIZE: 0pt">"7r4
</SPAN> <BR><SPAN class=copyctrl style="FONT-SIZE: 0pt">^kqhCo]=<
</SPAN> <BR><SPAN class=copyctrl style="FONT-SIZE: 0pt">[3l9&X-
</SPAN> <BR>7、 using 指示符 <SPAN class=copyctrl
style="FONT-SIZE: 0pt">jE79mya </SPAN> <BR><SPAN class=copyctrl
style="FONT-SIZE: 0pt">T)Y@ c </SPAN> <BR><SPAN class=copyctrl
style="FONT-SIZE: 0pt">v+X7UC </SPAN> <BR>namespace blip{ <SPAN
class=copyctrl style="FONT-SIZE: 0pt"> U@YI7(0$ </SPAN> <BR>int bi = 16,bj
= 15, bk = 23; <SPAN class=copyctrl style="FONT-SIZE: 0pt">4M]XU9C0
</SPAN> <BR>} <SPAN class=copyctrl style="FONT-SIZE: 0pt">O?O#24<
</SPAN> <BR><SPAN class=copyctrl style="FONT-SIZE: 0pt">V 03tA}G
</SPAN> <BR>int bj = 0; <SPAN class=copyctrl style="FONT-SIZE: 0pt">E< *
}]V3 </SPAN> <BR><SPAN class=copyctrl style="FONT-SIZE: 0pt">a?38P L
</SPAN> <BR>void mainip() <SPAN class=copyctrl
style="FONT-SIZE: 0pt">I~mj#?g#rG </SPAN> <BR>{ <SPAN class=copyctrl
style="FONT-SIZE: 0pt">q|Ce$[O$ </SPAN> <BR>using namespace blip; <SPAN
class=copyctrl style="FONT-SIZE: 0pt">gZ GpK </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">@$>Dznup </SPAN> <BR>++bi;
//设置blip::bi为17; <SPAN class=copyctrl style="FONT-SIZE: 0pt">E$ZqUs[ rv
</SPAN> <BR>++bj; //错误:二义性 <SPAN class=copyctrl
style="FONT-SIZE: 0pt">X!o\3qBR$j </SPAN> <BR>全局bj还是blip:bj? <SPAN
class=copyctrl style="FONT-SIZE: 0pt">"H:%NR&- </SPAN> <BR><SPAN
class=copyctrl style="FONT-SIZE: 0pt">oXoh !>1 </SPAN> <BR>++::bj; //
设置全局bj为1 <SPAN class=copyctrl style="FONT-SIZE: 0pt">Bicl8bo
</SPAN> <BR>++blip::bj; // 设置blip::bj为16 <SPAN class=copyctrl
style="FONT-SIZE: 0pt">|K95.f </SPAN> <BR>int bk = 97; //局部bk隐藏blip:bk
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -