<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>ASM, C , C++ ...</title><link>http://blog.vckbase.com/howto/category/915.html</link><description>ASM, C , C++ ...</description><managingEditor>莫问春秋</managingEditor><dc:language>zh-CHS</dc:language><generator>.Text Version 0.958.2004.214</generator><item><dc:creator>莫问春秋</dc:creator><title>x86是满递减堆栈还是空递减堆栈？</title><link>http://blog.vckbase.com/howto/archive/2007/07/14/27388.html</link><pubDate>Sat, 14 Jul 2007 15:17:00 GMT</pubDate><guid>http://blog.vckbase.com/howto/archive/2007/07/14/27388.html</guid><wfw:comment>http://blog.vckbase.com/howto/comments/27388.html</wfw:comment><comments>http://blog.vckbase.com/howto/archive/2007/07/14/27388.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blog.vckbase.com/howto/comments/commentRss/27388.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/howto/services/trackbacks/27388.html</trackback:ping><description>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 所谓满递减堆栈是指堆栈通过减小存储器的地址向下增长，堆栈指针指向内含有效数据项的最低地址。空递减堆栈是指堆栈通过减小存储器的地址向下增长，堆栈指针指向堆栈下的第一个空位置。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 那么x86是属于那一种呢？&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 结论是x86的堆栈是满递减堆栈。&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们经常遇到的堆栈操作就是函数调用时需要将函数的参数入栈，因此在调用函数的地方设置一个断点，然后查看汇编代码：&lt;BR&gt;&lt;IMG height=48 src="/images/vckbase_com/howto/disa.JPG" width=384 border=0&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这里Hello函数有一个默认值为9的参数.&lt;BR&gt;&lt;BR&gt;在00401078这行代码执行后停住，然后打开vc的registers可以看到目前esp的值，这是一个内存地址。然后在Memory里面查看esp所值的内存的值，结果是刚好是9.&lt;BR&gt;&lt;IMG style="WIDTH: 356px; HEIGHT: 177px" height=173 src="/images/vckbase_com/howto/registers.JPG" width=356 border=0&gt;&lt;BR&gt;&lt;BR&gt;&lt;IMG height=173 src="/images/vckbase_com/howto/memory.JPG" width=356 border=0&gt;&lt;img src ="http://blog.vckbase.com/howto/aggbug/27388.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>莫问春秋</dc:creator><title>构造函数调用虚函数追踪 </title><link>http://blog.vckbase.com/howto/archive/2007/06/27/27120.html</link><pubDate>Wed, 27 Jun 2007 14:33:00 GMT</pubDate><guid>http://blog.vckbase.com/howto/archive/2007/06/27/27120.html</guid><wfw:comment>http://blog.vckbase.com/howto/comments/27120.html</wfw:comment><comments>http://blog.vckbase.com/howto/archive/2007/06/27/27120.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://blog.vckbase.com/howto/comments/commentRss/27120.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/howto/services/trackbacks/27120.html</trackback:ping><description>&lt;P&gt;&amp;nbsp; 好久不写blog都生疏了，刚好公司要组织一次C++的基本功考试,就一个派生类调用虚函数的问题研究了一下编译器的实现：&lt;BR&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"&gt;
&lt;DIV&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;A&lt;BR&gt;&lt;IMG id=Codehighlighter1_8_76_Open_Image onclick="this.style.display='none'; Codehighlighter1_8_76_Open_Text.style.display='none'; Codehighlighter1_8_76_Closed_Image.style.display='inline'; Codehighlighter1_8_76_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_8_76_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_8_76_Closed_Text.style.display='none'; Codehighlighter1_8_76_Open_Image.style.display='inline'; Codehighlighter1_8_76_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_8_76_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_8_76_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;:&lt;BR&gt;&lt;IMG id=Codehighlighter1_22_23_Open_Image onclick="this.style.display='none'; Codehighlighter1_22_23_Open_Text.style.display='none'; Codehighlighter1_22_23_Closed_Image.style.display='inline'; Codehighlighter1_22_23_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_22_23_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_22_23_Closed_Text.style.display='none'; Codehighlighter1_22_23_Open_Image.style.display='inline'; Codehighlighter1_22_23_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;A()&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_22_23_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_22_23_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG id=Codehighlighter1_30_31_Open_Image onclick="this.style.display='none'; Codehighlighter1_30_31_Open_Text.style.display='none'; Codehighlighter1_30_31_Closed_Image.style.display='inline'; Codehighlighter1_30_31_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_30_31_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_30_31_Closed_Text.style.display='none'; Codehighlighter1_30_31_Open_Image.style.display='inline'; Codehighlighter1_30_31_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;~&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;A()&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_30_31_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_30_31_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG id=Codehighlighter1_57_74_Open_Image onclick="this.style.display='none'; Codehighlighter1_57_74_Open_Text.style.display='none'; Codehighlighter1_57_74_Closed_Image.style.display='inline'; Codehighlighter1_57_74_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_57_74_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_57_74_Closed_Text.style.display='none'; Codehighlighter1_57_74_Open_Image.style.display='inline'; Codehighlighter1_57_74_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;virtual&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Display()&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_57_74_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_57_74_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{cout&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;A&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;endl;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;B:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;A&lt;BR&gt;&lt;IMG id=Codehighlighter1_97_174_Open_Image onclick="this.style.display='none'; Codehighlighter1_97_174_Open_Text.style.display='none'; Codehighlighter1_97_174_Closed_Image.style.display='inline'; Codehighlighter1_97_174_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_97_174_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_97_174_Closed_Text.style.display='none'; Codehighlighter1_97_174_Open_Image.style.display='inline'; Codehighlighter1_97_174_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_97_174_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_97_174_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;:&lt;BR&gt;&lt;IMG id=Codehighlighter1_111_122_Open_Image onclick="this.style.display='none'; Codehighlighter1_111_122_Open_Text.style.display='none'; Codehighlighter1_111_122_Closed_Image.style.display='inline'; Codehighlighter1_111_122_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_111_122_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_111_122_Closed_Text.style.display='none'; Codehighlighter1_111_122_Open_Image.style.display='inline'; Codehighlighter1_111_122_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;B()&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_111_122_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_111_122_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{Display();}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG id=Codehighlighter1_129_130_Open_Image onclick="this.style.display='none'; Codehighlighter1_129_130_Open_Text.style.display='none'; Codehighlighter1_129_130_Closed_Image.style.display='inline'; Codehighlighter1_129_130_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_129_130_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_129_130_Closed_Text.style.display='none'; Codehighlighter1_129_130_Open_Image.style.display='inline'; Codehighlighter1_129_130_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;~&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;B()&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_129_130_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_129_130_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG id=Codehighlighter1_155_172_Open_Image onclick="this.style.display='none'; Codehighlighter1_155_172_Open_Text.style.display='none'; Codehighlighter1_155_172_Closed_Image.style.display='inline'; Codehighlighter1_155_172_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_155_172_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_155_172_Closed_Text.style.display='none'; Codehighlighter1_155_172_Open_Image.style.display='inline'; Codehighlighter1_155_172_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;virtual&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Display()&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_155_172_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_155_172_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{cout&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;B&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;endl;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;main()&lt;BR&gt;&lt;IMG id=Codehighlighter1_188_224_Open_Image onclick="this.style.display='none'; Codehighlighter1_188_224_Open_Text.style.display='none'; Codehighlighter1_188_224_Closed_Image.style.display='inline'; Codehighlighter1_188_224_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_188_224_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_188_224_Closed_Text.style.display='none'; Codehighlighter1_188_224_Open_Image.style.display='inline'; Codehighlighter1_188_224_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_188_224_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_188_224_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;B&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;pBb&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;B;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;delete&amp;nbsp;pBb;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;在B(){Display();}设定一个断点，跟踪到汇编代码得到如下代码：&lt;BR&gt;00401391&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax,dword ptr [ebp-10h]&lt;BR&gt;00401394&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dword ptr [eax],offset B::`vftable' (00432020)&lt;BR&gt;0040139A&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecx,dword ptr [ebp-10h]&lt;BR&gt;0040139D&amp;nbsp;&amp;nbsp; call&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#ff0000&gt;@ILT+155(B::Display) (004010a0)&lt;/FONT&gt;&lt;BR&gt;前三排的代码是设置虚函数表，然后直接调用了B::Display函数，并没有通过虚函数表间接调用这个函数。这说明在构造函数中虽然虚函数表已经设置好了，但是调用虚函数是不会使用虚函数表的，是直接调用.&lt;BR&gt;&lt;BR&gt;下面的代码是非构造函数内经过虚函数表间接调用Display的汇编码：&lt;BR&gt;0040127E&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; edx,dword ptr [ebp-10h]&lt;BR&gt;00401281&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eax,dword ptr [edx]&lt;BR&gt;00401283&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; esi,esp&lt;BR&gt;00401285&amp;nbsp;&amp;nbsp; mov&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ecx,dword ptr [ebp-10h]&lt;BR&gt;00401288&amp;nbsp;&amp;nbsp; call&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color=#ff0000&gt;dword ptr [eax]&lt;/FONT&gt;&lt;img src ="http://blog.vckbase.com/howto/aggbug/27120.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>莫问春秋</dc:creator><title>[转贴]总结一下C++的名称查找顺序  from cppblog.com/shifan3</title><link>http://blog.vckbase.com/howto/archive/2006/12/29/23717.html</link><pubDate>Fri, 29 Dec 2006 02:44:00 GMT</pubDate><guid>http://blog.vckbase.com/howto/archive/2006/12/29/23717.html</guid><wfw:comment>http://blog.vckbase.com/howto/comments/23717.html</wfw:comment><comments>http://blog.vckbase.com/howto/archive/2006/12/29/23717.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/howto/comments/commentRss/23717.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/howto/services/trackbacks/23717.html</trackback:ping><description>&lt;P&gt;1。符号查找（对于函数此时只看名字，不看参数）&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 大致顺序是&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (1)如果有限定名( XXX:: )那么就直接在XXX里查找&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (2)函数局部名字空间&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (3)(如果是成员)类名字空间&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (4)递归向上至所有基类的名字空间&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (5)当前名字空间&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (6)递归向外至所有外层名字空间,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在任一层里, 用using导入的符号和该层的其他符号同一对待。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keonig查找: 对于函数, 如果参数为类/结构/模版类并位于其他的名字空间,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在(5)和(6)的查找中导入该空间(不递归向外)的符号一同查找.&lt;/P&gt;
&lt;P&gt;2。（如果是函数）重载决议（注意此时特化的函数不参与决议）&lt;/P&gt;
&lt;P&gt;3。（如果是类内部的名字）检查访问权（注意此时特化的函数仍然不参与决议）&lt;/P&gt;
&lt;P&gt;4。（如果找到了一个模版）模版特化决议&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;编译器执行以上步骤的时候是使用贪心匹配，只要找到一个符合当前检查内容的就会停止查&lt;BR&gt;找&lt;BR&gt;所以任何一层都有可能发生错误的掩盖情况&lt;/P&gt;
&lt;P&gt;例1&lt;BR&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;1&lt;/SPAN&gt; &lt;IMG id=Codehighlighter1_11_12_Open_Image onclick="this.style.display='none'; Codehighlighter1_11_12_Open_Text.style.display='none'; Codehighlighter1_11_12_Closed_Image.style.display='inline'; Codehighlighter1_11_12_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt; &lt;IMG id=Codehighlighter1_11_12_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_11_12_Closed_Text.style.display='none'; Codehighlighter1_11_12_Open_Image.style.display='inline'; Codehighlighter1_11_12_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;f(&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;)&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_11_12_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_11_12_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;2&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Y&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;3&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&lt;IMG id=Codehighlighter1_22_81_Open_Image onclick="this.style.display='none'; Codehighlighter1_22_81_Open_Text.style.display='none'; Codehighlighter1_22_81_Closed_Image.style.display='inline'; Codehighlighter1_22_81_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt; &lt;IMG id=Codehighlighter1_22_81_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_22_81_Closed_Text.style.display='none'; Codehighlighter1_22_81_Open_Image.style.display='inline'; Codehighlighter1_22_81_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_22_81_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_22_81_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;4&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;:&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;5&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&lt;IMG id=Codehighlighter1_44_45_Open_Image onclick="this.style.display='none'; Codehighlighter1_44_45_Open_Text.style.display='none'; Codehighlighter1_44_45_Closed_Image.style.display='inline'; Codehighlighter1_44_45_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt; &lt;IMG id=Codehighlighter1_44_45_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_44_45_Closed_Text.style.display='none'; Codehighlighter1_44_45_Open_Image.style.display='inline'; Codehighlighter1_44_45_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;f()&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_44_45_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_44_45_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;6&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Y()&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;7&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&lt;IMG id=Codehighlighter1_59_79_Open_Image onclick="this.style.display='none'; Codehighlighter1_59_79_Open_Text.style.display='none'; Codehighlighter1_59_79_Closed_Image.style.display='inline'; Codehighlighter1_59_79_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt; &lt;IMG id=Codehighlighter1_59_79_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_59_79_Closed_Text.style.display='none'; Codehighlighter1_59_79_Open_Image.style.display='inline'; Codehighlighter1_59_79_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_59_79_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_59_79_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;8&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f(&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;&amp;nbsp;9&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008080"&gt;10&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;/SPAN&gt; &lt;/DIV&gt;
&lt;P&gt;&lt;BR&gt;这里的f(2)在1.(2)这里找到了符号f，就不会向上到1.(5)查找到真正的f(int)了&lt;/P&gt;
&lt;P&gt;例2&lt;BR&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"&gt;&lt;IMG id=Codehighlighter1_11_12_Open_Image onclick="this.style.display='none'; Codehighlighter1_11_12_Open_Text.style.display='none'; Codehighlighter1_11_12_Closed_Image.style.display='inline'; Codehighlighter1_11_12_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt; &lt;IMG id=Codehighlighter1_11_12_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_11_12_Closed_Text.style.display='none'; Codehighlighter1_11_12_Open_Image.style.display='inline'; Codehighlighter1_11_12_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;g(&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;)&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_11_12_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_11_12_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;namespace&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;S&lt;BR&gt;&lt;IMG id=Codehighlighter1_26_83_Open_Image onclick="this.style.display='none'; Codehighlighter1_26_83_Open_Text.style.display='none'; Codehighlighter1_26_83_Closed_Image.style.display='inline'; Codehighlighter1_26_83_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_26_83_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_26_83_Closed_Text.style.display='none'; Codehighlighter1_26_83_Open_Image.style.display='inline'; Codehighlighter1_26_83_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_26_83_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_26_83_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG id=Codehighlighter1_40_41_Open_Image onclick="this.style.display='none'; Codehighlighter1_40_41_Open_Text.style.display='none'; Codehighlighter1_40_41_Closed_Image.style.display='inline'; Codehighlighter1_40_41_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_40_41_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_40_41_Closed_Text.style.display='none'; Codehighlighter1_40_41_Open_Image.style.display='inline'; Codehighlighter1_40_41_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;g()&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_40_41_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_40_41_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt; &lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;h()&lt;BR&gt;&lt;IMG id=Codehighlighter1_61_81_Open_Image onclick="this.style.display='none'; Codehighlighter1_61_81_Open_Text.style.display='none'; Codehighlighter1_61_81_Closed_Image.style.display='inline'; Codehighlighter1_61_81_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_61_81_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_61_81_Closed_Text.style.display='none'; Codehighlighter1_61_81_Open_Image.style.display='inline'; Codehighlighter1_61_81_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_61_81_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_61_81_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g(&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P&gt;这里的g(1)在1.(5)这里找到了符号g，就不会向上到1.(6)查找到真正的g(int)了&lt;/P&gt;
&lt;P&gt;例3&lt;BR&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Y&lt;BR&gt;&lt;IMG id=Codehighlighter1_8_69_Open_Image onclick="this.style.display='none'; Codehighlighter1_8_69_Open_Text.style.display='none'; Codehighlighter1_8_69_Closed_Image.style.display='inline'; Codehighlighter1_8_69_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_8_69_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_8_69_Closed_Text.style.display='none'; Codehighlighter1_8_69_Open_Image.style.display='inline'; Codehighlighter1_8_69_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_8_69_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_8_69_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG id=Codehighlighter1_25_26_Open_Image onclick="this.style.display='none'; Codehighlighter1_25_26_Open_Text.style.display='none'; Codehighlighter1_25_26_Closed_Image.style.display='inline'; Codehighlighter1_25_26_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_25_26_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_25_26_Closed_Text.style.display='none'; Codehighlighter1_25_26_Open_Image.style.display='inline'; Codehighlighter1_25_26_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;f(&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;)&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_25_26_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_25_26_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;[1]&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;:&lt;BR&gt;&lt;IMG id=Codehighlighter1_60_61_Open_Image onclick="this.style.display='none'; Codehighlighter1_60_61_Open_Text.style.display='none'; Codehighlighter1_60_61_Closed_Image.style.display='inline'; Codehighlighter1_60_61_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_60_61_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_60_61_Closed_Text.style.display='none'; Codehighlighter1_60_61_Open_Image.style.display='inline'; Codehighlighter1_60_61_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;f(&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;double&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;)&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_60_61_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_60_61_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;[2]&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;main()&lt;BR&gt;&lt;IMG id=Codehighlighter1_84_107_Open_Image onclick="this.style.display='none'; Codehighlighter1_84_107_Open_Text.style.display='none'; Codehighlighter1_84_107_Closed_Image.style.display='inline'; Codehighlighter1_84_107_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_84_107_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_84_107_Closed_Text.style.display='none'; Codehighlighter1_84_107_Open_Image.style.display='inline'; Codehighlighter1_84_107_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_84_107_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_84_107_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Y&amp;nbsp;y;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y.f(&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;1&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P&gt;y.f(1)会调用[2]吗？不会，因为在第2步重载决议的时候就选定[1]了，因此这段代码会报&lt;BR&gt;出无法访问private成员的错误&lt;/P&gt;
&lt;P&gt;例4&lt;BR&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;SPAN style="COLOR: #000000"&gt;template&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;typename&amp;nbsp;T&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG id=Codehighlighter1_31_32_Open_Image onclick="this.style.display='none'; Codehighlighter1_31_32_Open_Text.style.display='none'; Codehighlighter1_31_32_Closed_Image.style.display='inline'; Codehighlighter1_31_32_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt; &lt;IMG id=Codehighlighter1_31_32_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_31_32_Closed_Text.style.display='none'; Codehighlighter1_31_32_Open_Image.style.display='inline'; Codehighlighter1_31_32_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;f(T)&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_31_32_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_31_32_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;[1]&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt;template&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;typename&amp;nbsp;T&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG id=Codehighlighter1_73_74_Open_Image onclick="this.style.display='none'; Codehighlighter1_73_74_Open_Text.style.display='none'; Codehighlighter1_73_74_Closed_Image.style.display='inline'; Codehighlighter1_73_74_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt; &lt;IMG id=Codehighlighter1_73_74_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_73_74_Closed_Text.style.display='none'; Codehighlighter1_73_74_Open_Image.style.display='inline'; Codehighlighter1_73_74_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;f(T&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;)&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_73_74_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_73_74_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;[2]&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt;template&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG id=Codehighlighter1_113_114_Open_Image onclick="this.style.display='none'; Codehighlighter1_113_114_Open_Text.style.display='none'; Codehighlighter1_113_114_Closed_Image.style.display='inline'; Codehighlighter1_113_114_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt; &lt;IMG id=Codehighlighter1_113_114_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_113_114_Closed_Text.style.display='none'; Codehighlighter1_113_114_Open_Image.style.display='inline'; Codehighlighter1_113_114_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;f&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;*&amp;gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;(&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;)&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_113_114_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_113_114_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;[3]&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;main()&lt;BR&gt;&lt;IMG id=Codehighlighter1_135_163_Open_Image onclick="this.style.display='none'; Codehighlighter1_135_163_Open_Text.style.display='none'; Codehighlighter1_135_163_Closed_Image.style.display='inline'; Codehighlighter1_135_163_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_135_163_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_135_163_Closed_Text.style.display='none'; Codehighlighter1_135_163_Open_Image.style.display='inline'; Codehighlighter1_135_163_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_135_163_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_135_163_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;p&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f(p);&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P&gt;这里的f(p)会调用[3]吗？&lt;BR&gt;不会，因为在进行到第二步重载决议的时候，只有[1]和[2]参与了重载决议，结果选择了&lt;BR&gt;[2]，那么[1]的特化版本[3]当然就轮不到了。&lt;/P&gt;
&lt;P&gt;例5&lt;BR&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;X&lt;BR&gt;&lt;IMG id=Codehighlighter1_8_88_Open_Image onclick="this.style.display='none'; Codehighlighter1_8_88_Open_Text.style.display='none'; Codehighlighter1_8_88_Closed_Image.style.display='inline'; Codehighlighter1_8_88_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_8_88_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_8_88_Closed_Text.style.display='none'; Codehighlighter1_8_88_Open_Image.style.display='inline'; Codehighlighter1_8_88_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_8_88_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_8_88_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG id=Codehighlighter1_45_46_Open_Image onclick="this.style.display='none'; Codehighlighter1_45_46_Open_Text.style.display='none'; Codehighlighter1_45_46_Closed_Image.style.display='inline'; Codehighlighter1_45_46_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_45_46_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_45_46_Closed_Text.style.display='none'; Codehighlighter1_45_46_Open_Image.style.display='inline'; Codehighlighter1_45_46_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;typename&amp;nbsp;T&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;g()&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_45_46_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_45_46_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;:&lt;BR&gt;&lt;IMG id=Codehighlighter1_85_86_Open_Image onclick="this.style.display='none'; Codehighlighter1_85_86_Open_Text.style.display='none'; Codehighlighter1_85_86_Closed_Image.style.display='inline'; Codehighlighter1_85_86_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_85_86_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_85_86_Closed_Text.style.display='none'; Codehighlighter1_85_86_Open_Image.style.display='inline'; Codehighlighter1_85_86_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;template&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;g&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;()&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_85_86_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_85_86_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;main()&lt;BR&gt;&lt;IMG id=Codehighlighter1_103_130_Open_Image onclick="this.style.display='none'; Codehighlighter1_103_130_Open_Text.style.display='none'; Codehighlighter1_103_130_Closed_Image.style.display='inline'; Codehighlighter1_103_130_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_103_130_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_103_130_Closed_Text.style.display='none'; Codehighlighter1_103_130_Open_Image.style.display='inline'; Codehighlighter1_103_130_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_103_130_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_103_130_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;X&amp;nbsp;y;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y.g&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;();&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;/SPAN&gt;&lt;/DIV&gt;
&lt;P&gt;这里首先第3步访问检查发现g为private（此时g的特化版本被直接无视了），所以即使&lt;BR&gt;g&amp;lt;int&amp;gt;为public, 该段代码仍然不能够编译通过&lt;/P&gt;
&lt;P&gt;例6&lt;BR&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;SPAN style="COLOR: #0000ff"&gt;namespace&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;E&lt;BR&gt;&lt;IMG id=Codehighlighter1_12_51_Open_Image onclick="this.style.display='none'; Codehighlighter1_12_51_Open_Text.style.display='none'; Codehighlighter1_12_51_Closed_Image.style.display='inline'; Codehighlighter1_12_51_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_12_51_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_12_51_Closed_Text.style.display='none'; Codehighlighter1_12_51_Open_Image.style.display='inline'; Codehighlighter1_12_51_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_12_51_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_12_51_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG id=Codehighlighter1_25_26_Open_Image onclick="this.style.display='none'; Codehighlighter1_25_26_Open_Text.style.display='none'; Codehighlighter1_25_26_Closed_Image.style.display='inline'; Codehighlighter1_25_26_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_25_26_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_25_26_Closed_Text.style.display='none'; Codehighlighter1_25_26_Open_Image.style.display='inline'; Codehighlighter1_25_26_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;X&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_25_26_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_25_26_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG id=Codehighlighter1_42_43_Open_Image onclick="this.style.display='none'; Codehighlighter1_42_43_Open_Text.style.display='none'; Codehighlighter1_42_43_Closed_Image.style.display='inline'; Codehighlighter1_42_43_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_42_43_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_42_43_Closed_Text.style.display='none'; Codehighlighter1_42_43_Open_Image.style.display='inline'; Codehighlighter1_42_43_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;f(X)&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_42_43_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_42_43_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;[1]&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;BR&gt;&lt;IMG id=Codehighlighter1_66_67_Open_Image onclick="this.style.display='none'; Codehighlighter1_66_67_Open_Text.style.display='none'; Codehighlighter1_66_67_Closed_Image.style.display='inline'; Codehighlighter1_66_67_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt; &lt;IMG id=Codehighlighter1_66_67_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_66_67_Closed_Text.style.display='none'; Codehighlighter1_66_67_Open_Image.style.display='inline'; Codehighlighter1_66_67_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;f(E::X)&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_66_67_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_66_67_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;[2]&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;X&lt;BR&gt;&lt;IMG id=Codehighlighter1_85_177_Open_Image onclick="this.style.display='none'; Codehighlighter1_85_177_Open_Text.style.display='none'; Codehighlighter1_85_177_Closed_Image.style.display='inline'; Codehighlighter1_85_177_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_85_177_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_85_177_Closed_Text.style.display='none'; Codehighlighter1_85_177_Open_Image.style.display='inline'; Codehighlighter1_85_177_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_85_177_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_85_177_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;:&lt;BR&gt;&lt;IMG id=Codehighlighter1_107_108_Open_Image onclick="this.style.display='none'; Codehighlighter1_107_108_Open_Text.style.display='none'; Codehighlighter1_107_108_Closed_Image.style.display='inline'; Codehighlighter1_107_108_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_107_108_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_107_108_Closed_Text.style.display='none'; Codehighlighter1_107_108_Open_Image.style.display='inline'; Codehighlighter1_107_108_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;f()&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_107_108_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_107_108_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;[3]&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt; &lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;g()&lt;BR&gt;&lt;IMG id=Codehighlighter1_133_175_Open_Image onclick="this.style.display='none'; Codehighlighter1_133_175_Open_Text.style.display='none'; Codehighlighter1_133_175_Closed_Image.style.display='inline'; Codehighlighter1_133_175_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_133_175_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_133_175_Closed_Text.style.display='none'; Codehighlighter1_133_175_Open_Image.style.display='inline'; Codehighlighter1_133_175_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN id=Codehighlighter1_133_175_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="http://www.cppblog.com/Images/dot.gif"&gt; &lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_133_175_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;E::X&amp;nbsp;x;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f(x);&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;[4]&lt;/SPAN&gt; &lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt; &lt;/DIV&gt;
&lt;P&gt;[4]会调用那个呢? 在1.(3)里就确定了是[3],因此参数不匹配&lt;BR&gt;如果注释掉[3]的f,那么由于koenig查找, 在1.(5)里[1]和[2]都会是平等的可选项&lt;BR&gt;所以会出现二义性.&lt;BR&gt;如果把namespace E改为class E, 把E中的f改为静态函数&lt;BR&gt;由于koenig查找仅仅导入参数的名字空间, 因此[1]将不参与1.(5)的查找,&lt;BR&gt;最终结果会是[2]&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/howto/aggbug/23717.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>莫问春秋</dc:creator><title>关于operator=的一点疑问？</title><link>http://blog.vckbase.com/howto/archive/2006/08/11/21825.html</link><pubDate>Fri, 11 Aug 2006 06:34:00 GMT</pubDate><guid>http://blog.vckbase.com/howto/archive/2006/08/11/21825.html</guid><wfw:comment>http://blog.vckbase.com/howto/comments/21825.html</wfw:comment><comments>http://blog.vckbase.com/howto/archive/2006/08/11/21825.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://blog.vckbase.com/howto/comments/commentRss/21825.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/howto/services/trackbacks/21825.html</trackback:ping><description>&lt;P&gt;An assignment operator shall be implemented by a &lt;FONT color=#ff0000&gt;non-static member&lt;/FONT&gt; function with exactly one parameter.Because a copy assignment operator operator= is implicitly declared for a class if not declared by the user ,a base class assignment operator is always&lt;FONT color=#ff0000&gt; hidden&lt;/FONT&gt; by the copy assignment operator of the derived class.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; --- 摘自 [ANSI-C++ 1998 Standard]&lt;BR&gt;&lt;BR&gt;下面有一段代码：&lt;BR&gt;&lt;/P&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"&gt;
&lt;DIV&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Base&amp;nbsp;&lt;BR&gt;&lt;IMG id=Codehighlighter1_12_101_Open_Image onclick="this.style.display='none'; Codehighlighter1_12_101_Open_Text.style.display='none'; Codehighlighter1_12_101_Closed_Image.style.display='inline'; Codehighlighter1_12_101_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_12_101_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_12_101_Closed_Text.style.display='none'; Codehighlighter1_12_101_Open_Image.style.display='inline'; Codehighlighter1_12_101_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_12_101_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_12_101_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;:&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;operator&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;const&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Base&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;right)&lt;BR&gt;&lt;IMG id=Codehighlighter1_60_99_Open_Image onclick="this.style.display='none'; Codehighlighter1_60_99_Open_Text.style.display='none'; Codehighlighter1_60_99_Closed_Image.style.display='inline'; Codehighlighter1_60_99_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_60_99_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_60_99_Closed_Text.style.display='none'; Codehighlighter1_60_99_Open_Image.style.display='inline'; Codehighlighter1_60_99_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_60_99_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_60_99_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"B&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;ase's&amp;nbsp;&amp;nbsp;operator&amp;nbsp;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;endl;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Derd:&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Base&lt;BR&gt;&lt;IMG id=Codehighlighter1_128_217_Open_Image onclick="this.style.display='none'; Codehighlighter1_128_217_Open_Text.style.display='none'; Codehighlighter1_128_217_Closed_Image.style.display='inline'; Codehighlighter1_128_217_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_128_217_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_128_217_Closed_Text.style.display='none'; Codehighlighter1_128_217_Open_Image.style.display='inline'; Codehighlighter1_128_217_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_128_217_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_128_217_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;:&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;void&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;operator&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;const&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Base&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;amp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;right)&lt;BR&gt;&lt;IMG id=Codehighlighter1_176_214_Open_Image onclick="this.style.display='none'; Codehighlighter1_176_214_Open_Text.style.display='none'; Codehighlighter1_176_214_Closed_Image.style.display='inline'; Codehighlighter1_176_214_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_176_214_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_176_214_Closed_Text.style.display='none'; Codehighlighter1_176_214_Open_Image.style.display='inline'; Codehighlighter1_176_214_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_176_214_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_176_214_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cout&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Derd's&amp;nbsp;operator&amp;nbsp;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;endl;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;main(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;argc,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;char&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;argv[])&lt;BR&gt;&lt;IMG id=Codehighlighter1_254_312_Open_Image onclick="this.style.display='none'; Codehighlighter1_254_312_Open_Text.style.display='none'; Codehighlighter1_254_312_Closed_Image.style.display='inline'; Codehighlighter1_254_312_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_254_312_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_254_312_Closed_Text.style.display='none'; Codehighlighter1_254_312_Open_Image.style.display='inline'; Codehighlighter1_254_312_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_254_312_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_254_312_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Derd&amp;nbsp;lDerd;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Derd&amp;nbsp;rDerd;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lDerd&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;rDerd;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR&gt;这段代码的结果是：&lt;BR&gt;Base's operator =&lt;BR&gt;按照C++标准的说明，基类的operator =应该被hidden了，可是这里为什么还是这个结果？察看汇编代码发现，实际上Base的operator=间接的在派生类的implicitly-declared Derd::operator=中被调用。问题就来了，我明明已经在派生类中自己声明了一个operator=的啊！我翻看了一些资料，都说在你自己不声明任何复制赋值操作符的时候，编译器会为你隐式生成一个，可是这儿我已经声明了一个，为什么编译器还要声明复制赋值操作符？&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在几位兄台的提点下，我仔细了搜索了下C++标准，查找了相关内容。我的错误大概是我没搞清楚复制赋值操作符的声明形式，A user-declared copy assignment operator X::operator= is a non-static non-template member function of class X with exactly one parameter of type X, X&amp;amp;, const X&amp;amp;, volatile X&amp;amp; or const volatile X&amp;amp;。从这一点来看，void operator =(&lt;FONT color=#ff0000&gt;const Base &amp;amp; right&lt;/FONT&gt;)根本不是Derd的复制赋值操作符，所以编译器隐式声明了一个void operator =(&lt;FONT color=#ff0000&gt;const&amp;nbsp;Derd &amp;amp; right&lt;/FONT&gt;)。请大家在帮我分析下这个结论有问题不。&lt;img src ="http://blog.vckbase.com/howto/aggbug/21825.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>莫问春秋</dc:creator><title>C++多态居然可以这样用?</title><link>http://blog.vckbase.com/howto/archive/2006/08/02/21657.html</link><pubDate>Wed, 02 Aug 2006 03:30:00 GMT</pubDate><guid>http://blog.vckbase.com/howto/archive/2006/08/02/21657.html</guid><wfw:comment>http://blog.vckbase.com/howto/comments/21657.html</wfw:comment><comments>http://blog.vckbase.com/howto/archive/2006/08/02/21657.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://blog.vckbase.com/howto/comments/commentRss/21657.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/howto/services/trackbacks/21657.html</trackback:ping><description>&lt;SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-fareast-font-family: 宋体"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT face=宋体&gt;用代码说话吧。&lt;BR&gt;如下：&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-bidi-font-size: 12.0pt; mso-font-kerning: 1.0pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;BR&gt;
&lt;DIV style="BORDER-RIGHT: windowtext 0.5pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 0.5pt solid; PADDING-LEFT: 5.4pt; BACKGROUND: #e6e6e6; PADDING-BOTTOM: 4px; BORDER-LEFT: windowtext 0.5pt solid; WIDTH: 98%; PADDING-TOP: 4px; BORDER-BOTTOM: windowtext 0.5pt solid"&gt;
&lt;DIV&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;B&lt;BR&gt;&lt;IMG id=Codehighlighter1_8_106_Open_Image onclick="this.style.display='none'; Codehighlighter1_8_106_Open_Text.style.display='none'; Codehighlighter1_8_106_Closed_Image.style.display='inline'; Codehighlighter1_8_106_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_8_106_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_8_106_Closed_Text.style.display='none'; Codehighlighter1_8_106_Open_Image.style.display='inline'; Codehighlighter1_8_106_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_8_106_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_8_106_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;:&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;virtual&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Comment(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;v)&lt;BR&gt;&lt;IMG id=Codehighlighter1_46_83_Open_Image onclick="this.style.display='none'; Codehighlighter1_46_83_Open_Text.style.display='none'; Codehighlighter1_46_83_Closed_Image.style.display='inline'; Codehighlighter1_46_83_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_46_83_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_46_83_Closed_Text.style.display='none'; Codehighlighter1_46_83_Open_Image.style.display='inline'; Codehighlighter1_46_83_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_46_83_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_46_83_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{val&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;v;cout&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Base&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;endl;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;v;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;protected&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;:&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;val;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;class&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;D&amp;nbsp;:&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;public&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;B&lt;BR&gt;&lt;IMG id=Codehighlighter1_128_210_Open_Image onclick="this.style.display='none'; Codehighlighter1_128_210_Open_Text.style.display='none'; Codehighlighter1_128_210_Closed_Image.style.display='inline'; Codehighlighter1_128_210_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_128_210_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_128_210_Closed_Text.style.display='none'; Codehighlighter1_128_210_Open_Image.style.display='inline'; Codehighlighter1_128_210_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_128_210_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_128_210_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;Comment&amp;nbsp;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;v)&lt;BR&gt;&lt;IMG id=Codehighlighter1_150_189_Open_Image onclick="this.style.display='none'; Codehighlighter1_150_189_Open_Text.style.display='none'; Codehighlighter1_150_189_Closed_Image.style.display='inline'; Codehighlighter1_150_189_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_150_189_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_150_189_Closed_Text.style.display='none'; Codehighlighter1_150_189_Open_Image.style.display='inline'; Codehighlighter1_150_189_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedSubBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_150_189_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_150_189_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{val&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;v;cout&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Drived&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;lt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;endl;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;v;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;private&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;:&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;val;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;main(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;int&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;argc,&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;char&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;argv[])&lt;BR&gt;&lt;IMG id=Codehighlighter1_246_368_Open_Image onclick="this.style.display='none'; Codehighlighter1_246_368_Open_Text.style.display='none'; Codehighlighter1_246_368_Closed_Image.style.display='inline'; Codehighlighter1_246_368_Closed_Text.style.display='inline';" src="/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top&gt;&lt;IMG id=Codehighlighter1_246_368_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_246_368_Closed_Text.style.display='none'; Codehighlighter1_246_368_Open_Image.style.display='inline'; Codehighlighter1_246_368_Open_Text.style.display='inline';" src="/Images/OutliningIndicators/ContractedBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_246_368_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"&gt;&lt;IMG src="/Images/dot.gif"&gt;&lt;/SPAN&gt;&lt;SPAN id=Codehighlighter1_246_368_Open_Text&gt;&lt;SPAN style="COLOR: #000000"&gt;{&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;B&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;bptr&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;D;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;bptr&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;-&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;Comment(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;99&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;)&amp;nbsp;&amp;nbsp;;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;标准多态行为&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;*&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;bptr).Comment(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;99&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&amp;nbsp;这样也是多态？从结果来看，的确是&lt;/SPAN&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;system(&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;pause&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;"&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;);&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/InBlock.gif" align=top&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top&gt;}&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: #000000"&gt;&lt;BR&gt;&lt;IMG src="/Images/OutliningIndicators/None.gif" align=top&gt;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp; bptr-&amp;gt;Comment(99)这种用-&amp;gt;应该是最典型的多态调用的方式，(*bptr).Comment(99)这种首先用*解引用指针然后用.来调用函数既然也能够多态，这大大改变了我以前的认知，甚至我现在还很怀疑这个结论成立否？不过在汇编成面上，他们的代码是一样的，这个证据让我还是很相信这个结论的正确性的。如果我的这份结论是错误的，请大家指出！ &lt;/SPAN&gt;&lt;/P&gt;&lt;img src ="http://blog.vckbase.com/howto/aggbug/21657.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>莫问春秋</dc:creator><title>C++ 备忘录  (一)</title><link>http://blog.vckbase.com/howto/archive/2006/02/11/17641.html</link><pubDate>Sat, 11 Feb 2006 04:07:00 GMT</pubDate><guid>http://blog.vckbase.com/howto/archive/2006/02/11/17641.html</guid><wfw:comment>http://blog.vckbase.com/howto/comments/17641.html</wfw:comment><comments>http://blog.vckbase.com/howto/archive/2006/02/11/17641.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blog.vckbase.com/howto/comments/commentRss/17641.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/howto/services/trackbacks/17641.html</trackback:ping><description>&lt;P dir=ltr style="MARGIN-RIGHT: 0px"&gt;&lt;FONT color=#ff0000&gt;&lt;FONT size=2&gt;&lt;FONT color=#000080&gt;目录：&lt;BR&gt;&lt;A href="#target1"&gt;１、成员函数的重载、覆盖与隐藏？&lt;/A&gt;&lt;BR&gt;&lt;A href="#target2"&gt;２、用户自定义类型转换的方法？&lt;/A&gt;&lt;BR&gt;&lt;A href="#target3"&gt;３、声明的定义的区别?&lt;/A&gt;&lt;BR&gt;&lt;A href="#target4"&gt;４、&lt;FONT color=#000080&gt;类模板的使用方法总结？&lt;/FONT&gt;&lt;/A&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&lt;A href="#target5"&gt;5、const的修饰问题？&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;A name=target1&gt;成员函数的重载、覆盖与隐藏?&lt;/A&gt;&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt; --摘自《高质量C++/C 编程指南》&lt;BR&gt;&lt;BR&gt;成员函数被&amp;#8220;&lt;FONT color=#ff0000&gt;重载&lt;/FONT&gt;&amp;#8221;的特征：&lt;BR&gt;（1）相同的范围（在同一个类中）；&lt;BR&gt;（2）函数名字相同；&lt;BR&gt;（3）参数不同；&lt;BR&gt;（4）virtual 关键字可有可无。&lt;BR&gt;&lt;BR&gt;&amp;#8220;&lt;FONT color=#ff0000&gt;覆盖&lt;/FONT&gt;&amp;#8221;是指派生类函数覆盖基类函数，特征是：&lt;BR&gt;（1）不同的范围（分别位于派生类与基类）；&lt;BR&gt;（2）函数名字相同；&lt;BR&gt;（3）参数相同；&lt;BR&gt;（4）基类函数必须有virtual 关键字。&lt;BR&gt;&lt;BR&gt;&amp;#8220;&lt;FONT color=#ff0000&gt;隐藏&lt;/FONT&gt;&amp;#8221;规则的特征是：&lt;BR&gt;（1）如果派生类的函数与基类的函数同名，但是参数不同。此时，不论有无virtual&lt;BR&gt;关键字，基类的函数将被隐藏（注意别与重载混淆）。&lt;BR&gt;（2）如果派生类的函数与基类的函数同名，并且参数也相同，但是基类函数没有virtual&lt;BR&gt;关键字。此时，基类的函数被隐藏（注意别与覆盖混淆）。&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#000080&gt;&lt;A name=target2&gt;用户自定义类型转换的方法？&lt;/A&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 首先应该明白什么是&amp;#8220;隐式转换&amp;#8221;和&amp;#8220;强制转换&amp;#8221;？&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;FONT size=2&gt;　&amp;nbsp; 前者是指：在算数运算和关系运算中如果参与运算的操作数类型不一致，则系统自动对数据进行转换，转换的原则是将低类型数据转换为高类型数据。这种转换过程中数据的精度没有损失，但是在赋值运算中，则要求一例将右值类型转换为左值类型，这存在精度损失。&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;FONT size=2&gt;　　后者是指：强制转换往往是显式的转换，这种转换是暂时性的，一次性的。&lt;BR&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT size=2&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;FONT size=2&gt;　　在用户定义的转换中，如果要把一个类对象隐式转换成其他类型的对象，使用转换函数，形式如下：　&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;　　　&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;Operator type();&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;这里的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;type &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;可用内置类型类类型或&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;typedef &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;名取代，但是不允许&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;type &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;表示数组或函数。&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;类型转换函数必须是成员函数它的声明不能指定返回类型和参数表&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT size=2&gt;&lt;SPAN lang=EN-US&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;凡是只有一个参数的类的构造函数，每一个函数都定义了一个隐式转换。可以使用&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;explicit&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;来告诉编译器不要使用那个显式构造函数来执行隐式类型转换。&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;FONT size=2&gt;　　　用户定义的转换是由转换函数或构造函数执行的。正如前面已经看到的在转换函&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&lt;FONT size=2&gt;数执行转换之后接着可以有一个&amp;#8220;标准转换&amp;#8221;把转换函数的结果转换成最终的目标类型。类似地，构造函数执行转换之前也可以有一个&amp;#8220;标准转换&amp;#8221;把要被转换的值变成构造函数参数的类型。这里&amp;#8220;标准转换&amp;#8221;指系统内置的转换。&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#000080&gt;&lt;A name=target3&gt;声明和定义的区别？&lt;/A&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN lang=EN-US style="COLOR: red"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt; mso-char-indent-count: 2.0"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;声明：一种把一个名称引入或者重新引入到某个C++作用域的构造。&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 定义：它也是一种声明，但该声明必须给出&lt;FONT color=#ff0000&gt;被声明实体的细节&lt;/FONT&gt;。 对于变量而言，这里的细节是指：为被声明实体保留存储空间。 对于class类型和函数定义而言，指的是包含有一队花括号内容的声明。 对于外部变量而言，指的是前面没有关键字extern或者在声明时就进行初始化。&amp;nbsp;&amp;nbsp;&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;变量的声明&lt;/FONT&gt;有两种情况：&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 一种是需要建立存储空间的。例如：int&amp;nbsp;a&amp;nbsp;在声明的时候就已经建立了存储空间。&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 另一种是不需要建立存储空间的&amp;nbsp;例如：extern&amp;nbsp;int&amp;nbsp;a&amp;nbsp;其中&amp;nbsp;变量a是在别的文件中定义的.前者是"定义性声明 (defining&amp;nbsp;declaration)"或者称为"定义(definition)",而后者是"引用性声明 (referncing&amp;nbsp;declaration)"&amp;nbsp;从广义的角度来讲&amp;nbsp;声明中包含着定义，但是并非所有的声明都是定义，例如：int&amp;nbsp;a&amp;nbsp;它既是声明，同时又是定义。然而对于&amp;nbsp;extern&amp;nbsp;a&amp;nbsp;来讲&amp;nbsp;它只是声明不是定义。一般的情况下我们常常这样叙述，把建立空间的声明称之为"定义"，而把不需要建立存储空间称之为"声明"。很明显我们在这里指的生命是范围比较窄的，也就是说非定义性质的声明.&amp;nbsp;&amp;nbsp;&amp;nbsp; --摘自&lt;A href="http://www.blog.edu.cn/user1/13760/archives/2005/241770.shtml"&gt;erictb的blog&amp;nbsp;&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 编译器总是对每一个&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black"&gt;&lt;FONT face="Times New Roman"&gt;cpp&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件分别进行编译，这就是为什么&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black"&gt;&lt;FONT face="Times New Roman"&gt;debug&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件夹下来总是存在多个&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black"&gt;&lt;FONT face="Times New Roman"&gt;obj&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件。编译器必须知道被编译的&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black"&gt;&lt;FONT face="Times New Roman"&gt;cpp&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件内的所有&amp;#8220;类型信息&amp;#8221;，所以我们总是经常&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black"&gt;&lt;FONT face="Times New Roman"&gt;include&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;别的头文件，然后链接器会正确链接&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black"&gt;&lt;FONT face="Times New Roman"&gt;obj&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;文件。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black"&gt;&lt;FONT face="Times New Roman"&gt;C++&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;里的&lt;FONT color=#ff0000&gt;函数&lt;/FONT&gt;声明&amp;#8220;隐式&amp;#8221;表达该函数会在别个地方定义。如果在函数前面加一个&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black"&gt;&lt;FONT face="Times New Roman"&gt;extern&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的话，就变成显式声明了。&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在&lt;FONT color=#ff0000&gt;变量&lt;/FONT&gt;前面使用&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black"&gt;&lt;FONT face="Times New Roman"&gt;extern&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的话，只是声明一个对象，而不分配内存。详细参看《&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black"&gt;&lt;FONT face="Times New Roman"&gt;C+primer&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;》&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black"&gt;&lt;FONT face="Times New Roman"&gt;331&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;页。&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;另外，&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black"&gt;&lt;FONT face="Times New Roman"&gt;extern &amp;#8220;c&amp;#8221;加在函数前面表示函数是用C语言写的函数， 不过他只能够压制&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black"&gt;&lt;FONT face="Times New Roman"&gt;nonmember function&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;的&amp;#8220;&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black"&gt;&lt;FONT face="Times New Roman"&gt;mangling&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;&amp;#8221;效果。同时，变量前面的&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black"&gt;&lt;FONT face="Times New Roman"&gt;extern &amp;#8220;c&amp;#8221;也只是表示声明。&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#000080&gt;&lt;A name=target4&gt;类模板的使用方法总结？&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#000000&gt;模板参数可以是一个模板类型参数也可以是一个模板非类型参数（它代表了一个常量表达式）。&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 华文中宋"&gt;显式实例声明：&lt;SPAN lang=EN-US&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在定义了模版类后，可以用&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red; FONT-FAMILY: CourierNewPSMT; mso-bidi-font-family: CourierNewPSMT"&gt;&lt;FONT face="Times New Roman" size=3&gt;template class Queue&amp;lt;int&amp;gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 华文中宋"&gt;显式实例声明。也可以使用&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red; FONT-FAMILY: CourierNewPSMT; mso-bidi-font-family: CourierNewPSMT"&gt;&lt;FONT face="Times New Roman" size=3&gt;template&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-ascii-font-family: CourierNewPSMT; mso-hansi-font-family: CourierNewPSMT; mso-bidi-font-family: CourierNewPSMT"&gt;&lt;FONT color=#000000&gt;特化整个模版类或者某一个特化函数。甚至可以特化模版参数的某一个，&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN lang=EN-US style="COLOR: red; FONT-FAMILY: CourierNewPSMT; mso-bidi-font-family: CourierNewPSMT"&gt;template &amp;lt;int hi, int wid&amp;gt;class Screen&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: CourierNewPSMT; mso-bidi-font-family: CourierNewPSMT"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-layout-grid-align: none" align=left&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: CourierNewPSMT; mso-bidi-font-family: CourierNewPSMT"&gt;&lt;FONT face="Times New Roman"&gt;{}&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: CourierNewPSMT; mso-hansi-font-family: CourierNewPSMT; mso-bidi-font-family: CourierNewPSMT"&gt;改写成&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="COLOR: red; FONT-FAMILY: CourierNewPSMT; mso-bidi-font-family: CourierNewPSMT"&gt;&lt;FONT face="Times New Roman"&gt;&lt;FONT size=3&gt;template &amp;lt;int hi&amp;gt;class Screen&amp;lt;hi, 80&amp;gt;{}&lt;BR&gt;&lt;BR&gt;&lt;FONT color=#000000&gt;&lt;FONT size=2&gt;模板有两种编译模式：&amp;#8220;&lt;/FONT&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 华文中宋; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"&gt;包含编译模式&amp;#8221;和&amp;#8220;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-family: 华文中宋; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"&gt;分离编译模式&amp;#8221;。前者要求将模板的定义放在一个头文件中，也提供一个cpp文件来包含这个头文件，这样编译器才能编译模版定义。&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#000080&gt;&lt;A name=target5&gt;const的修饰问题？&lt;/A&gt;&lt;BR&gt;&lt;FONT color=#000000&gt;类似const int* &amp;amp; rp、const int *、int * const这样的语句，const在其中到底修饰谁？&lt;BR&gt;&lt;BR&gt;根据C++98标准8.3.2对引用的定义：&lt;BR&gt;对于声明：&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; T D;&lt;BR&gt;&amp;nbsp;&amp;nbsp;如果D具有如下形式：&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp; D1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //注意，&amp;amp;与D1之间不能有任何cv修饰符&lt;BR&gt;&amp;nbsp;那么标识符D1的类型为&amp;#8220;reference to T&amp;#8221;。&lt;BR&gt;&amp;nbsp;对于&amp;#8220;const int* &amp;amp; rp&amp;#8221;套用上面的格式，则：&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; T&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;D;&lt;BR&gt;&amp;nbsp;&amp;nbsp; const int*&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;rp;&lt;/FONT&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT color=#000000&gt;这样，D就具有了&amp;amp;D1的形式，其中D1为rp。而T，则是const int*。&lt;BR&gt;则&lt;BR&gt;const int * &amp;amp; 表示：&amp;#8220;a non-const reference to T where T is a pointer to 'const int' &amp;#8221;。&lt;BR&gt;const int *表示：&amp;#8220;pointer to 'const int'&amp;#8221;。&lt;BR&gt;int * const表示：&amp;#8220;const pointer to int&amp;#8221;。&lt;BR&gt;&lt;BR&gt;对于引用，还有一个很重要的原则：&lt;BR&gt;&lt;FONT color=#ff0000&gt;const 常量引用(reference to const T)&lt;/FONT&gt;可以用不同类型的对象初始化，只要能从一种类型转换到另一种类型即可，也可以是不可寻址的值如文字常量。&lt;BR&gt;包括两种常见的方式：&lt;BR&gt;&lt;BR&gt;double dval = 3.14159; const int &amp;amp;ir = 1024;&lt;BR&gt;const int ival = 1024;&amp;nbsp;&amp;nbsp; const int * const &amp;amp;pi_ref = &amp;amp;ival; //需要常量指针&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;img src ="http://blog.vckbase.com/howto/aggbug/17641.html" width = "1" height = "1" /&gt;</description></item><item><dc:creator>莫问春秋</dc:creator><title>thunk初探</title><link>http://blog.vckbase.com/howto/archive/2006/02/08/17585.html</link><pubDate>Wed, 08 Feb 2006 10:35:00 GMT</pubDate><guid>http://blog.vckbase.com/howto/archive/2006/02/08/17585.html</guid><wfw:comment>http://blog.vckbase.com/howto/comments/17585.html</wfw:comment><comments>http://blog.vckbase.com/howto/archive/2006/02/08/17585.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://blog.vckbase.com/howto/comments/commentRss/17585.html</wfw:commentRss><trackback:ping>http://blog.vckbase.com/howto/services/trackbacks/17585.html</trackback:ping><description>&lt;P&gt; &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;在看&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;vc&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;知识库&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;38&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;期的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;com&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;部分《&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;atl&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;布幔之下的秘密》一文中，开始的时候对&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;thunk&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;非常的不理解，在跟一位学长探讨之后，呵呵，主要是学到了&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;vc&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;下如何得到察看程序的汇编代码。终于明白了是怎么一回事。&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;开始对&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;mov dword ptr [esp+0x4], pThis&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;[esp+0x4]&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;指向&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;WindowProc&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;hwnd&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;参数非常的不理解，似乎按照函数的入栈规则，&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;[esp+0x4]&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;是不可能指向&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;WindowProc&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;hwnd&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;参数。懂得察看汇编代码后，发现在窗口建立过程只运行一次的&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;StartWndProc&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;中对&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;thunk&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;初始化（&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;init&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;函数）后，得到了&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;WNDPROC pProc = (WNDPROC)&amp;amp;(pThis-&amp;gt;m_thunk.thunk);&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;（注意这里&lt;/SPAN&gt;&lt;SPAN lang=EN-US&gt;typedef LRESULT (CALLBACK* WNDPROC)(HWND, UINT, WPARAM, LPARAM);&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'"&gt;）&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-FAMILY: 宋体; mso-ascii-font-fam