﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><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>C++博客-xingkongyun-文章分类-C++语言</title><link>http://www.cppblog.com/xingkongyun/category/7361.html</link><description>星空陨的程序小站</description><language>zh-cn</language><lastBuildDate>Sat, 28 Jun 2008 01:49:07 GMT</lastBuildDate><pubDate>Sat, 28 Jun 2008 01:49:07 GMT</pubDate><ttl>60</ttl><item><title>C++关键字之const</title><link>http://www.cppblog.com/xingkongyun/articles/54838.html</link><dc:creator>杨彬彬</dc:creator><author>杨彬彬</author><pubDate>Fri, 27 Jun 2008 14:16:00 GMT</pubDate><guid>http://www.cppblog.com/xingkongyun/articles/54838.html</guid><wfw:comment>http://www.cppblog.com/xingkongyun/comments/54838.html</wfw:comment><comments>http://www.cppblog.com/xingkongyun/articles/54838.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xingkongyun/comments/commentRss/54838.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xingkongyun/services/trackbacks/54838.html</trackback:ping><description><![CDATA[&nbsp;
<p align=left><span>1.</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>const int r=100; //</span><span>标准</span><span>const</span><span>变量声明加初始化，因为默认内部连接所以必须被初始化，其作用域为此文件，编译器经过类型检查后直接用</span><span>100</span><span>在编译时替换</span></p>
&nbsp;
<p><span>2.const</span><span>修饰指针</span></p>
<p><span>第一种情况：</span><span>const int *ptr=&amp;a; ptr</span><span>为指向常量的指针，其所指的值不可修改，但是其所指向的地址可以修改。</span></p>
<p><span>第二种情况：</span><span>int * const ptr=&amp;a</span><span>；</span><span>ptr</span><span>为常量指针，其所指的地址不可被修改，但是其所指的值可以被修改。</span></p>
<p><span>第三种情况：</span><span>const int * const ptr=&amp;a</span><span>，</span><span>ptr</span><span>为指向常量的常量指针，其所指向的地址不可修改，其所指向的值也不可修改。</span></p>
实例：<br>
<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"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>using&nbsp;namespace&nbsp;std&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img id=Codehighlighter1_54_463_Open_Image onclick="this.style.display='none'; Codehighlighter1_54_463_Open_Text.style.display='none'; Codehighlighter1_54_463_Closed_Image.style.display='inline'; Codehighlighter1_54_463_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_54_463_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_54_463_Closed_Text.style.display='none'; Codehighlighter1_54_463_Open_Image.style.display='inline'; Codehighlighter1_54_463_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_54_463_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_54_463_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;c</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;d</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">第一种情况:</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;ptr_one</span><span style="COLOR: #000000">=&amp;</span><span style="COLOR: #000000">a;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;*ptr_one=3;&nbsp;错误ptr为指向常量的指针，其所指的值不能修改</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;ptr_one</span><span style="COLOR: #000000">=&amp;</span><span style="COLOR: #000000">b;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">正确，ptr所指向的地址可以修改<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">21</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">第二种情况:</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;ptr_two</span><span style="COLOR: #000000">=&amp;</span><span style="COLOR: #000000">c;<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">ptr_two=&amp;d;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">错误，ptr_two为常量指针，其所指的地址不可修改</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">ptr_two</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">正确，prt_two所指向的值可以修改<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">28</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">29</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">第三种情况：</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">30</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;ptr_three</span><span style="COLOR: #000000">=&amp;</span><span style="COLOR: #000000">a;<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">*ptr_three=5;&nbsp;错误：ptr_three为指向常量的常量指针，其所指向的值不可修改<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">34</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">ptr_three=&amp;b;&nbsp;&nbsp;错误：ptr_three所指向的地址不可修改</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">35</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US>3.const </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用于函数参数<br>直接看实例：<br></p>
<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"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;fun_one(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;r)<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img id=Codehighlighter1_28_59_Open_Image onclick="this.style.display='none'; Codehighlighter1_28_59_Open_Text.style.display='none'; Codehighlighter1_28_59_Closed_Image.style.display='inline'; Codehighlighter1_28_59_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_28_59_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_28_59_Closed_Text.style.display='none'; Codehighlighter1_28_59_Open_Image.style.display='inline'; Codehighlighter1_28_59_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_28_59_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_28_59_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">*r=1;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">错误，不能在函数内改变r所指向的值</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;fun_two(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;r)<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img id=Codehighlighter1_90_126_Open_Image onclick="this.style.display='none'; Codehighlighter1_90_126_Open_Text.style.display='none'; Codehighlighter1_90_126_Closed_Image.style.display='inline'; Codehighlighter1_90_126_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_90_126_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_90_126_Closed_Text.style.display='none'; Codehighlighter1_90_126_Open_Image.style.display='inline'; Codehighlighter1_90_126_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_90_126_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_90_126_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">r=new&nbsp;int(1);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">错误，不能改变r所指向的地址</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;fun_three(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;r)<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img id=Codehighlighter1_157_180_Open_Image onclick="this.style.display='none'; Codehighlighter1_157_180_Open_Text.style.display='none'; Codehighlighter1_157_180_Closed_Image.style.display='inline'; Codehighlighter1_157_180_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_157_180_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_157_180_Closed_Text.style.display='none'; Codehighlighter1_157_180_Open_Image.style.display='inline'; Codehighlighter1_157_180_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_157_180_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_157_180_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">r=1;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">错误，不能改变r的值</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">19</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
</span>&nbsp;
<p><span>4.const </span><span>对于类</span></p>
<p><span>{1}</span><span>对于</span><span>const </span><span>修饰的类成员变量，只能在构造函数的参数初始化表里对其进行初始化，否则会引起编译错误。</span></p>
<p><span>（</span><span>2</span><span>）对于</span><span>const </span><span>修饰的成员函数</span> <span>，如</span><span> int Fun</span><span>（</span><span>int a</span><span>）</span><span>const</span><span>，这样声明之后任何企图在函数内部修改成员变量的值或者调用非</span><span>const</span><span>成员函数都会引起编译错误。</span></p>
<p><span>（</span><span>3</span><span>）对于</span><span>const</span><span>声明的用户自定义类的对象，如果调用这个类的非</span><span>const</span><span>成员函数，将会引起编译错误，编译器会保证在</span><span>const</span><span>对象的生命期内不被改变。</span></p>
<p><span>如果</span><span>const</span><span>对象一定要调用此函数的话，那就将此函数声明为</span><span>const</span><span>。<br>实例：<br></p>
<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"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>using&nbsp;namespace&nbsp;std&nbsp;;<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Test<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img id=Codehighlighter1_54_271_Open_Image onclick="this.style.display='none'; Codehighlighter1_54_271_Open_Text.style.display='none'; Codehighlighter1_54_271_Closed_Image.style.display='inline'; Codehighlighter1_54_271_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_54_271_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_54_271_Closed_Text.style.display='none'; Codehighlighter1_54_271_Open_Image.style.display='inline'; Codehighlighter1_54_271_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_54_271_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_54_271_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Test():const_value(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img id=Codehighlighter1_90_104_Open_Image onclick="this.style.display='none'; Codehighlighter1_90_104_Open_Text.style.display='none'; Codehighlighter1_90_104_Closed_Image.style.display='inline'; Codehighlighter1_90_104_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_90_104_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_90_104_Closed_Text.style.display='none'; Codehighlighter1_90_104_Open_Image.style.display='inline'; Codehighlighter1_90_104_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_90_104_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_90_104_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Test(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m):const_value(m)<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img id=Codehighlighter1_145_159_Open_Image onclick="this.style.display='none'; Codehighlighter1_145_159_Open_Text.style.display='none'; Codehighlighter1_145_159_Closed_Image.style.display='inline'; Codehighlighter1_145_159_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_145_159_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_145_159_Closed_Text.style.display='none'; Codehighlighter1_145_159_Open_Image.style.display='inline'; Codehighlighter1_145_159_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_145_159_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_145_159_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">i;<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;PrintValue()&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img id=Codehighlighter1_187_222_Open_Image onclick="this.style.display='none'; Codehighlighter1_187_222_Open_Text.style.display='none'; Codehighlighter1_187_222_Closed_Image.style.display='inline'; Codehighlighter1_187_222_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_187_222_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_187_222_Closed_Text.style.display='none'; Codehighlighter1_187_222_Open_Image.style.display='inline'; Codehighlighter1_187_222_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_187_222_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_187_222_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\nValue的值为：</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">value;<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;value;<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;const_value;<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img id=Codehighlighter1_287_356_Open_Image onclick="this.style.display='none'; Codehighlighter1_287_356_Open_Text.style.display='none'; Codehighlighter1_287_356_Closed_Image.style.display='inline'; Codehighlighter1_287_356_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_287_356_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_287_356_Closed_Text.style.display='none'; Codehighlighter1_287_356_Open_Image.style.display='inline'; Codehighlighter1_287_356_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_287_356_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_287_356_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>Test&nbsp;a(</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>a.PrintValue();<br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;Test&nbsp;b(</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>b.PrintValue();<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<p><br></span></p>
<img src ="http://www.cppblog.com/xingkongyun/aggbug/54838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xingkongyun/" target="_blank">杨彬彬</a> 2008-06-27 22:16 <a href="http://www.cppblog.com/xingkongyun/articles/54838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++关键字之explicit</title><link>http://www.cppblog.com/xingkongyun/articles/54592.html</link><dc:creator>杨彬彬</dc:creator><author>杨彬彬</author><pubDate>Wed, 25 Jun 2008 13:36:00 GMT</pubDate><guid>http://www.cppblog.com/xingkongyun/articles/54592.html</guid><wfw:comment>http://www.cppblog.com/xingkongyun/comments/54592.html</wfw:comment><comments>http://www.cppblog.com/xingkongyun/articles/54592.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xingkongyun/comments/commentRss/54592.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xingkongyun/services/trackbacks/54592.html</trackback:ping><description><![CDATA[一个explicit关键字声明的构造函数禁止编译器进行隐式类型转换 .（<font face=Arial>禁止单参数构造函数"被用于自动型别转换</font>）<br>参考如下代码：<br>
<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"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>using&nbsp;namespace&nbsp;std;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;C&nbsp;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id=Codehighlighter1_74_374_Open_Image onclick="this.style.display='none'; Codehighlighter1_74_374_Open_Text.style.display='none'; Codehighlighter1_74_374_Closed_Image.style.display='inline'; Codehighlighter1_74_374_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_74_374_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_74_374_Closed_Text.style.display='none'; Codehighlighter1_74_374_Open_Image.style.display='inline'; Codehighlighter1_74_374_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_74_374_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_74_374_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i;<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;C(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;C</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">)&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;an&nbsp;&nbsp;copy&nbsp;constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #008000"><img id=Codehighlighter1_132_175_Open_Image onclick="this.style.display='none'; Codehighlighter1_132_175_Open_Text.style.display='none'; Codehighlighter1_132_175_Closed_Image.style.display='inline'; Codehighlighter1_132_175_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_132_175_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_132_175_Closed_Text.style.display='none'; Codehighlighter1_132_175_Open_Image.style.display='inline'; Codehighlighter1_132_175_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_132_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_132_175_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\nin&nbsp;the&nbsp;copy&nbsp;constructor</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;explicit&nbsp;C(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;)&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;an&nbsp;explicit&nbsp;constructor</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #008000"><img id=Codehighlighter1_227_265_Open_Image onclick="this.style.display='none'; Codehighlighter1_227_265_Open_Text.style.display='none'; Codehighlighter1_227_265_Closed_Image.style.display='inline'; Codehighlighter1_227_265_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_227_265_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_227_265_Closed_Text.style.display='none'; Codehighlighter1_227_265_Open_Image.style.display='inline'; Codehighlighter1_227_265_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_227_265_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_227_265_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\nin&nbsp;the&nbsp;constructor</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;operator&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">()</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">classs&nbsp;-&gt;int</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">23</span><span style="COLOR: #008000"><img id=Codehighlighter1_305_351_Open_Image onclick="this.style.display='none'; Codehighlighter1_305_351_Open_Text.style.display='none'; Codehighlighter1_305_351_Closed_Image.style.display='inline'; Codehighlighter1_305_351_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_305_351_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_305_351_Closed_Text.style.display='none'; Codehighlighter1_305_351_Open_Image.style.display='inline'; Codehighlighter1_305_351_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_305_351_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_305_351_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\noperator&nbsp;int()</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;i;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;C()<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img id=Codehighlighter1_360_372_Open_Image onclick="this.style.display='none'; Codehighlighter1_360_372_Open_Text.style.display='none'; Codehighlighter1_360_372_Closed_Image.style.display='inline'; Codehighlighter1_360_372_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_360_372_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_360_372_Closed_Text.style.display='none'; Codehighlighter1_360_372_Open_Image.style.display='inline'; Codehighlighter1_360_372_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_360_372_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_360_372_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;test_fun1(C&nbsp;obj);<br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;test_fun2(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i);<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;test_fun3(C&nbsp;c);<br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img id=Codehighlighter1_458_631_Open_Image onclick="this.style.display='none'; Codehighlighter1_458_631_Open_Text.style.display='none'; Codehighlighter1_458_631_Closed_Image.style.display='inline'; Codehighlighter1_458_631_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_458_631_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_458_631_Closed_Text.style.display='none'; Codehighlighter1_458_631_Open_Image.style.display='inline'; Codehighlighter1_458_631_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_458_631_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_458_631_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">41</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;C&nbsp;c,&nbsp;d;<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;test_fun3(c);&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;c&nbsp;is&nbsp;copied<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">44</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">test_fun1(1);</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">错误，因为构造函数声明了explicit，所以禁止隐式转换</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">45</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">46</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;test_fun2(c);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">call&nbsp;operator&nbsp;int()const</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">47</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;test_fun1(c);<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cin.get();<br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">50</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;test_fun1(C&nbsp;obj)<br></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img id=Codehighlighter1_656_658_Open_Image onclick="this.style.display='none'; Codehighlighter1_656_658_Open_Text.style.display='none'; Codehighlighter1_656_658_Closed_Image.style.display='inline'; Codehighlighter1_656_658_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_656_658_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_656_658_Closed_Text.style.display='none'; Codehighlighter1_656_658_Open_Image.style.display='inline'; Codehighlighter1_656_658_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_656_658_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_656_658_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;test_fun2(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i)<br></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img id=Codehighlighter1_683_685_Open_Image onclick="this.style.display='none'; Codehighlighter1_683_685_Open_Text.style.display='none'; Codehighlighter1_683_685_Closed_Image.style.display='inline'; Codehighlighter1_683_685_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_683_685_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_683_685_Closed_Text.style.display='none'; Codehighlighter1_683_685_Open_Image.style.display='inline'; Codehighlighter1_683_685_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_683_685_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_683_685_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">60</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;test_fun3(C&nbsp;c)<br></span><span style="COLOR: #008080">61</span><span style="COLOR: #000000"><img id=Codehighlighter1_708_710_Open_Image onclick="this.style.display='none'; Codehighlighter1_708_710_Open_Text.style.display='none'; Codehighlighter1_708_710_Closed_Image.style.display='inline'; Codehighlighter1_708_710_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_708_710_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_708_710_Closed_Text.style.display='none'; Codehighlighter1_708_710_Open_Image.style.display='inline'; Codehighlighter1_708_710_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_708_710_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_708_710_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">62</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
从网上看到这段代码：<br>
<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"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>using&nbsp;namespace&nbsp;std;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img id=Codehighlighter1_74_240_Open_Image onclick="this.style.display='none'; Codehighlighter1_74_240_Open_Text.style.display='none'; Codehighlighter1_74_240_Closed_Image.style.display='inline'; Codehighlighter1_74_240_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_74_240_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_74_240_Closed_Text.style.display='none'; Codehighlighter1_74_240_Open_Image.style.display='inline'; Codehighlighter1_74_240_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Number&nbsp;</span><span id=Codehighlighter1_74_240_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_74_240_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;type;&nbsp;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img id=Codehighlighter1_142_144_Open_Image onclick="this.style.display='none'; Codehighlighter1_142_144_Open_Text.style.display='none'; Codehighlighter1_142_144_Closed_Image.style.display='inline'; Codehighlighter1_142_144_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_142_144_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_142_144_Closed_Text.style.display='none'; Codehighlighter1_142_144_Open_Image.style.display='inline'; Codehighlighter1_142_144_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number():&nbsp;type(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">void</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span id=Codehighlighter1_142_144_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_142_144_Open_Text><span style="COLOR: #000000">{&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img id=Codehighlighter1_193_195_Open_Image onclick="this.style.display='none'; Codehighlighter1_193_195_Open_Text.style.display='none'; Codehighlighter1_193_195_Closed_Image.style.display='inline'; Codehighlighter1_193_195_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_193_195_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_193_195_Closed_Text.style.display='none'; Codehighlighter1_193_195_Open_Image.style.display='inline'; Codehighlighter1_193_195_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;explicit&nbsp;&nbsp;&nbsp;Number(</span><span style="COLOR: #0000ff">short</span><span style="COLOR: #000000">)&nbsp;:&nbsp;type(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">short</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span id=Codehighlighter1_193_195_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_193_195_Open_Text><span style="COLOR: #000000">{&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img id=Codehighlighter1_232_234_Open_Image onclick="this.style.display='none'; Codehighlighter1_232_234_Open_Text.style.display='none'; Codehighlighter1_232_234_Closed_Image.style.display='inline'; Codehighlighter1_232_234_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_232_234_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_232_234_Closed_Text.style.display='none'; Codehighlighter1_232_234_Open_Image.style.display='inline'; Codehighlighter1_232_234_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Number(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)&nbsp;:&nbsp;type(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">int</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)&nbsp;</span><span id=Codehighlighter1_232_234_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_232_234_Open_Text><span style="COLOR: #000000">{&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img id=Codehighlighter1_274_292_Open_Image onclick="this.style.display='none'; Codehighlighter1_274_292_Open_Text.style.display='none'; Codehighlighter1_274_292_Closed_Image.style.display='inline'; Codehighlighter1_274_292_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_274_292_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_274_292_Closed_Text.style.display='none'; Codehighlighter1_274_292_Open_Image.style.display='inline'; Codehighlighter1_274_292_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Show(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;Number</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;n)&nbsp;</span><span id=Codehighlighter1_274_292_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_274_292_Open_Text><span style="COLOR: #000000">{&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;n.type;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;f()<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img id=Codehighlighter1_311_357_Open_Image onclick="this.style.display='none'; Codehighlighter1_311_357_Open_Text.style.display='none'; Codehighlighter1_311_357_Closed_Image.style.display='inline'; Codehighlighter1_311_357_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_311_357_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_311_357_Closed_Text.style.display='none'; Codehighlighter1_311_357_Open_Image.style.display='inline'; Codehighlighter1_311_357_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_311_357_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_311_357_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">short</span><span style="COLOR: #000000">&nbsp;s&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">42</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Show(s);&nbsp;<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img id=Codehighlighter1_370_398_Open_Image onclick="this.style.display='none'; Codehighlighter1_370_398_Open_Text.style.display='none'; Codehighlighter1_370_398_Closed_Image.style.display='inline'; Codehighlighter1_370_398_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_370_398_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_370_398_Closed_Text.style.display='none'; Codehighlighter1_370_398_Open_Image.style.display='inline'; Codehighlighter1_370_398_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_370_398_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_370_398_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>f();<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>cin.get();<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
这段代码的返回值为：int，这里面起关键作用的就是那个explicit<br><br><br>
<img src ="http://www.cppblog.com/xingkongyun/aggbug/54592.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xingkongyun/" target="_blank">杨彬彬</a> 2008-06-25 21:36 <a href="http://www.cppblog.com/xingkongyun/articles/54592.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++关键字typename(转载)</title><link>http://www.cppblog.com/xingkongyun/articles/54496.html</link><dc:creator>杨彬彬</dc:creator><author>杨彬彬</author><pubDate>Tue, 24 Jun 2008 13:56:00 GMT</pubDate><guid>http://www.cppblog.com/xingkongyun/articles/54496.html</guid><wfw:comment>http://www.cppblog.com/xingkongyun/comments/54496.html</wfw:comment><comments>http://www.cppblog.com/xingkongyun/articles/54496.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xingkongyun/comments/commentRss/54496.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xingkongyun/services/trackbacks/54496.html</trackback:ping><description><![CDATA[<p>转载自：<a href="http://dev.csdn.net/article/3/3354.shtm">http://dev.csdn.net/article/3/3354.shtm</a><br><span id=ArticleContent1_ArticleContent1_lblContent>&nbsp;</p>
<p>/*******************************************************************************<br>&nbsp;*&nbsp; SGI*STL是STL之父Alexander Stepanov和STL巨匠Matt Austern等人的作品, 是当今&nbsp; *<br>&nbsp;*&nbsp; 最富盛名、最出色的STL实现版本，全部源代码和说明文档可从<a href="http://www.sgi.com/STL/下"><u><font color=#0000ff>www.sgi.com/STL/下</font></u></a>&nbsp; *<br>&nbsp;*&nbsp; 载, 是我们学习STL的最佳范本. 但是众所周知, STL使用了大量复杂艰深的C++特性, *<br>&nbsp;*&nbsp; 加上STL本身的复杂和庞大, 使得阅读代码本身就成为一件非常困难的工作. 以下文&nbsp; *<br>&nbsp;*&nbsp; 字是我在学习STL过程中得到的一些经验和猜测, 希望能对大家有所帮助, 更希望能&nbsp; *<br>&nbsp;*&nbsp; 得到大家的批评和指正, 以利于我们的共同提高.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *<br>&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; myan&nbsp;&nbsp; *<br>&nbsp;*******************************************************************************/</p>
<p>在SGI*STL源代码里, typename这个新的C++关键字得使用可以说是随处可见. 很多以前学习过<br>C++的人可能还不认识typename, 其实它的常规用法很简单: 在声明模板函数或者模板类时, <br>传统的写法:<br>template &lt;class T&gt;<br>generic_function() {<br>//........<br>}</p>
<p>亦可以写成<br>template &lt;typename T&gt; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ------------<br>generic_func() {<br>//...............<br>}<br>引入这个关键字主要是为了避免class可能给人带来的混淆.<br>本来typename的用法就是这么简单, 但是STL源代码中还有typename的一种不常见的用法, 如果<br>不了解, 阅读源代码时就会遇到困难. 因为目前我找不到有关这个问题的说明, 所以自己试验了<br>一下, 得到一个猜测, 现简介如下, 请有识之士斧正.</p>
<p>首先看一段SGI*STL源代码, 摘自stl_iterator.h</p>
<p>1: template &lt;class _Container, class _Iterator&gt;<br>2: inline insert_iterator&lt;_Container&gt; inserter(_Container&amp; __x, _Iterator __i)<br>3: {<br>4:&nbsp;&nbsp; typedef typename _Container::iterator __iter;<br>5:&nbsp;&nbsp; return insert_iterator&lt;_Container&gt;(__x, __iter(__i));<br>6:&nbsp; }</p>
<p>令人费解的部分在第四行. 请大家在看我的解释之前先想一想, 我不敢保证下面解释的正确性和<br>全面性.</p>
<p>解释: <br>&nbsp;&nbsp;&nbsp; 我认为typename的语义是: 通知编译器, 在typename后面被声明的东西是一个类型, 而不是别的<br>什么东西.</p>
<p>&nbsp;</p>
<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"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">例子:<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;tpname.cpp</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typeinfo</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;for&nbsp;typeid()&nbsp;operator</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>using&nbsp;namespace&nbsp;std;<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typename&nbsp;TP</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img id=Codehighlighter1_142_205_Open_Image onclick="this.style.display='none'; Codehighlighter1_142_205_Open_Text.style.display='none'; Codehighlighter1_142_205_Closed_Image.style.display='inline'; Codehighlighter1_142_205_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_142_205_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_142_205_Closed_Text.style.display='none'; Codehighlighter1_142_205_Open_Image.style.display='inline'; Codehighlighter1_142_205_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>struct&nbsp;COne&nbsp;</span><span id=Codehighlighter1_142_205_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_142_205_Open_Text><span style="COLOR: #000000">{&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;default&nbsp;member&nbsp;is&nbsp;public</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">10</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;TP&nbsp;one_value_type;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>template&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typename&nbsp;COne</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;用一个模板类作为模板参数,&nbsp;这是很常见的</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">14</span><span style="COLOR: #008000"><img id=Codehighlighter1_272_422_Open_Image onclick="this.style.display='none'; Codehighlighter1_272_422_Open_Text.style.display='none'; Codehighlighter1_272_422_Closed_Image.style.display='inline'; Codehighlighter1_272_422_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_272_422_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_272_422_Closed_Text.style.display='none'; Codehighlighter1_272_422_Open_Image.style.display='inline'; Codehighlighter1_272_422_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #000000">struct&nbsp;CTwo&nbsp;</span><span id=Codehighlighter1_272_422_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_272_422_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;请注意以下两行<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;typedef&nbsp;COne::one_value_type&nbsp;&nbsp;two_value_type;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;*1</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">17</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;typename&nbsp;COne::one_value_type&nbsp;&nbsp;two_value_type;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;*2&nbsp;&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">18</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top></span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;以上两个模板类只是定义了两个内部的public类型,&nbsp;但请注意第二个类CTwo的two_value_type类型<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;依赖COne的one_value_type,&nbsp;而后者又取决于COne模板类实例化时传入的参数类型.</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">22</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img id=Codehighlighter1_551_788_Open_Image onclick="this.style.display='none'; Codehighlighter1_551_788_Open_Text.style.display='none'; Codehighlighter1_551_788_Closed_Image.style.display='inline'; Codehighlighter1_551_788_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_551_788_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_551_788_Closed_Text.style.display='none'; Codehighlighter1_551_788_Open_Image.style.display='inline'; Codehighlighter1_551_788_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_551_788_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_551_788_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;COne</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;OneInt_type;<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;CTwo</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;OneInt_type&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;TwoInt_type;<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;TwoInt_type::two_value_type&nbsp;i;<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j;<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;typeid(i)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;typeid(j)&nbsp;)&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;如果i是int型变量</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">30</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Right!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;打印Right</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">31</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;&nbsp;~tpname.cpp<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<p>&nbsp;</p>
<p>以上例子在Linux下用G++ 2.91编译通过, 结果打印"Right". 但是如果把*1行的注释号去掉, 注释<br>*2行, 则编译时报错, 编译器不知道COne::one_value_type为何物. 通常在模板类参数中的类型到<br>实例化之后才会显露真身, 但这个CTwo类偏偏又要依赖一个已经存在的COne模板类, 希望能够预先<br>保证CTwo::two_value_type与COne::one_value属于同一类型, 这是就只好请typename出山, 告诉<br>编译器, 后面的COne::one_value_type是一个已经存在于某处的类型的名字(type name), 这样编译<br>器就可以顺利的工作了.</p>
</span>
<img src ="http://www.cppblog.com/xingkongyun/aggbug/54496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xingkongyun/" target="_blank">杨彬彬</a> 2008-06-24 21:56 <a href="http://www.cppblog.com/xingkongyun/articles/54496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GetBuffer与ReleaseBuffer的用法，CString剖析---转载</title><link>http://www.cppblog.com/xingkongyun/articles/54347.html</link><dc:creator>杨彬彬</dc:creator><author>杨彬彬</author><pubDate>Mon, 23 Jun 2008 01:56:00 GMT</pubDate><guid>http://www.cppblog.com/xingkongyun/articles/54347.html</guid><wfw:comment>http://www.cppblog.com/xingkongyun/comments/54347.html</wfw:comment><comments>http://www.cppblog.com/xingkongyun/articles/54347.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xingkongyun/comments/commentRss/54347.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xingkongyun/services/trackbacks/54347.html</trackback:ping><description><![CDATA[转载自:http://hi.baidu.com/idealsoft/blog/item/02d74322339097f6d6cae24e.html<br><font face=宋体 color=#008080>这是一个非常容易被用错的函数，主要可能是由于大家对它的功能不太了解。其实点破的话，也不是那么深奥。<br>&nbsp;&nbsp;&nbsp; GetBuffer(int size)是用来返回一个你所指定大小可写内存的成员方法。它和被重载的操作符LPCTSTR还是有点本质区别的，LPCTSTR是直接返回一个只读内存的指针，而GetBuffer则是返回一个可以供调用者写入的内存，并且，你可以给定大小。下面是个简单的，但也是非常典型的例子：</font><br>
<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"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;readFile(CString</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;str,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;CString</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;strPathName)<br><img id=Codehighlighter1_60_382_Open_Image onclick="this.style.display='none'; Codehighlighter1_60_382_Open_Text.style.display='none'; Codehighlighter1_60_382_Closed_Image.style.display='inline'; Codehighlighter1_60_382_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_60_382_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_60_382_Closed_Text.style.display='none'; Codehighlighter1_60_382_Open_Image.style.display='inline'; Codehighlighter1_60_382_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_60_382_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"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_60_382_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FILE</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;fp&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fopen(strPathName,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;打开文件</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fseek(fp,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;SEEK_END);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;nLen&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ftell(fp);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;获得文件长度</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fseek(fp,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;SEEK_SET);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;重置读指针</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;psz&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;str.GetBuffer(nLen);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fread(psz,&nbsp;sizeof(</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">),&nbsp;nLen,&nbsp;fp);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">读文件内容</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;str.ReleaseBuffer();&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">千万不能缺少</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose(fp);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<font face=宋体 color=#008080>上面的函数是GetBuffer函数最典型的用法了，其实它就相当于申请一块nLen大小的内存，只不过，这块内存是被引用在CString对象的内部而已，这是非常有效的一种用法，如果不直接用GetBuffer函数来申请的话，那么你必须用new操作符（或者malloc()函数）在CString的外部申请，然后再将申请的内存拷贝到CString对象中，显然这是一个非常冗余的操作</font><font face=宋体 color=#008080>，会使你函数的效率大大下降。<br>&nbsp;&nbsp;&nbsp; ReleaseBuffer函数是用来告诉CString对象，你的GetBuffer所引用的内存已经使用完毕，现在必须对它进行封口，否则CString将不会知道它现在所包含的字符串的长度，所以在使用完GetBuffer之后，必须立即调用ReleaseBuffer函数重置CString的内部属性，其实也就是头部信息。<br></font>
<img src ="http://www.cppblog.com/xingkongyun/aggbug/54347.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xingkongyun/" target="_blank">杨彬彬</a> 2008-06-23 09:56 <a href="http://www.cppblog.com/xingkongyun/articles/54347.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++ 枚举类型的思考</title><link>http://www.cppblog.com/xingkongyun/articles/54300.html</link><dc:creator>杨彬彬</dc:creator><author>杨彬彬</author><pubDate>Sun, 22 Jun 2008 12:45:00 GMT</pubDate><guid>http://www.cppblog.com/xingkongyun/articles/54300.html</guid><wfw:comment>http://www.cppblog.com/xingkongyun/comments/54300.html</wfw:comment><comments>http://www.cppblog.com/xingkongyun/articles/54300.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xingkongyun/comments/commentRss/54300.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xingkongyun/services/trackbacks/54300.html</trackback:ping><description><![CDATA[<div class=postTitle><a class=postTitle2 id=viewpost1_TitleUrl href="http://www.cppblog.com/free2000fly/archive/2008/03/08/43961.html"><u><font color=#800080>C++ 枚举类型的思考(转载)</font></u></a> </div>
<p>原文网址:&nbsp; <a href="http://blog.csdn.net/classfactory/archive/2004/08/29/87749.aspx"><u><font color=#0000ff>http://blog.csdn.net/classfactory/archive/2004/08/29/87749.aspx</font></u></a></p>
<p>C++ 中的枚举类型继承于 C 语言。就像其他从 C 语言继承过来的很多特性一样，C++ 枚举也有缺点，这其中最显著的莫过于作用域问题——在枚举类型中定义的常量，属于定义枚举的作用域，而不属于这个枚举类型。例如下面的示例：</p>
<p>enum FileAccess {<br>&nbsp;&nbsp;&nbsp; Read = 0x1,<br>&nbsp;&nbsp;&nbsp; Write = 0x2,<br>};</p>
<p>FileAccess access = ::Read; // 正确<br>FileAccess access = FileAccess::Read; // 错误</p>
<p>C++枚举的这个特点对于习惯面向对象和作用域概念的人来说是不可接受的。首先，FileAccess::Read 显然更加符合程序员的直觉，因为上面的枚举定义理应等价于如下的定义（实际上，.NET 中的枚举类型便是如此实现的）：</p>
<p>class FileAccess {<br>&nbsp;&nbsp;&nbsp; static const int Read = 0x1;<br>&nbsp;&nbsp;&nbsp; static const int Write = 0x2;<br>};</p>
<p>其次，这导致我们无法在同一个作用域中定义两个同样名称的枚举值。也就是说，以下的代码是编译错误：</p>
<p>enum FileAccess {<br>&nbsp;&nbsp;&nbsp; Read = 0x1,<br>&nbsp;&nbsp;&nbsp; Write = 0x2,<br>};</p>
<p>enum FileShare {<br>&nbsp;&nbsp;&nbsp; Read = 0x1, // 重定义<br>&nbsp;&nbsp;&nbsp; Write = 0x2, // 重定义<br>};</p>
<p>如果这一点没有让你恼怒过的话，你可能还没写过多少 C++ 代码 :-)。实际上，在最新的 C++0x 标准草案中有关于枚举作用域问题的提案，但最终的解决方案会是怎样的就无法未卜先知了，毕竟对于象 C++ 这样使用广泛的语言来说，任何特性的增删和修改都必须十分小心谨慎。</p>
<p>当然，我们可以使用一些迂回的方法来解决这个问题（C++ 总是能给我们很多惊喜和意外）。例如，我们可以把枚举值放在一个结构里，并使用运算符重载来逼近枚举的特性：</p>
<p>struct FileAccess {<br>&nbsp;&nbsp;&nbsp; enum __Enum {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Read = 0x1,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Write = 0x2<br>&nbsp;&nbsp;&nbsp; };<br>&nbsp;&nbsp;&nbsp; __Enum _value; // 枚举值</p>
<p>&nbsp;&nbsp;&nbsp; FileAccess(int value = 0) : _value((__Enum)value) {}<br>&nbsp;&nbsp;&nbsp; FileAccess&amp; operator=(int value) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;_value = (__Enum)value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return *this;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; operator int() const {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this-&gt;_value;<br>&nbsp;&nbsp;&nbsp; }<br>};</p>
<p>我们现在可以按照希望的方式使用这个枚举类型：</p>
<p>FileAccess access = FileAccess::Read;</p>
<p>并且，因为我们提供了到 int 类型的转换运算符，因此在需要 int 的地方都可以使用它，例如 switch 语句：</p>
<p>switch (access) {<br>&nbsp;&nbsp;&nbsp; case FileAccess::Read:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; case FileAccess::Write:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>}</p>
<p>当然我们不愿意每次都手工编写这样的结构。通过使用宏，我们可以很容易做到这一点：</p>
<p>#define DECLARE_ENUM(E) \<br>struct E \<br>{ \<br>public: \<br>&nbsp;&nbsp;&nbsp; E(int value = 0) : _value((__Enum)value) { \<br>&nbsp;&nbsp;&nbsp; } \<br>&nbsp;&nbsp;&nbsp; E&amp; operator=(int value) { \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this-&gt;_value = (__Enum)value; \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return *this; \<br>&nbsp;&nbsp;&nbsp; } \<br>&nbsp;&nbsp;&nbsp; operator int() const { \<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this-&gt;_value; \<br>&nbsp;&nbsp;&nbsp; } \<br>\<br>&nbsp;&nbsp;&nbsp; enum __Enum {</p>
<p>#define END_ENUM() \<br>&nbsp;&nbsp;&nbsp; }; \<br>\<br>private: \<br>&nbsp;&nbsp;&nbsp; __Enum _value; \<br>};</p>
<p>我们现在可以按如下的方式定义前面的枚举，并且不比直接写 enum 复杂多少。</p>
<p>DECLARE_ENUM(FileAccess)<br>&nbsp;&nbsp;&nbsp; Read = 0x1,<br>&nbsp;&nbsp;&nbsp; Write = 0x2,<br>END_ENUM()</p>
<p>DECLARE_ENUM(FileShare)<br>&nbsp;&nbsp;&nbsp; Read = 0x1,<br>&nbsp;&nbsp;&nbsp; Write = 0x2,<br>END_ENUM()<br></p>
<img src ="http://www.cppblog.com/xingkongyun/aggbug/54300.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xingkongyun/" target="_blank">杨彬彬</a> 2008-06-22 20:45 <a href="http://www.cppblog.com/xingkongyun/articles/54300.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>指针, 指针的指针, 数组, 指针数组, 数组指针, 指针函数, 函数指针</title><link>http://www.cppblog.com/xingkongyun/articles/52889.html</link><dc:creator>杨彬彬</dc:creator><author>杨彬彬</author><pubDate>Wed, 11 Jun 2008 09:00:00 GMT</pubDate><guid>http://www.cppblog.com/xingkongyun/articles/52889.html</guid><wfw:comment>http://www.cppblog.com/xingkongyun/comments/52889.html</wfw:comment><comments>http://www.cppblog.com/xingkongyun/articles/52889.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xingkongyun/comments/commentRss/52889.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xingkongyun/services/trackbacks/52889.html</trackback:ping><description><![CDATA[<div style="FONT-SIZE: 14pt" align=left>指针, 指针的指针, 数组, 指针数组, 数组指针, 指针函数, 函数指针-----转载 </div>
<font face=宋体>
<p style="FONT-SIZE: 14pt" align=left><br><br>--------------指针----------------<br>int a=10;<br>int *p=&amp;a;</font></p>
<p style="FONT-SIZE: 14pt" align=left><font style="FONT-SIZE: 14pt" face=宋体>-------------指针的指针-----------<br>int b=20;<br>int *p=&amp;b;<br>int **p2p=&amp;p;</font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>-------------简单数组-----------------<br>int c[10];//整数数组，含有10个整数元素<br>也就是说每一个元素都是整数<br><br>--------------指针数组--------------------<br>int *p[10];//指针数组，含有10个指针元素<br>也就是说每一个元素都是指针<br><br>--------------数组指针--------------------<br>int (*p)[10];//数组指针，这个指针能够用来指向<br>含有10个元素的整数数组 </font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体></font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>------------函数指针---------------------</font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>int (*p)( ); // 指向函数的指针...这里声明了一个指针p，该指针指向返回值是整型（即函数类型为整型）的函数！ </font></p>
<p style="FONT-SIZE: 14pt" align=left><br><font face=宋体>----------------指针函数---------------------------</font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>int *p(int a,float b); //返回值为指针的函数...该函数返回指向整型变量的指针！</font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>即该函数的类型为int *, p和上例不同，他是函数名！上例中是指针！</font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>===========================================================================</font></p>
<p style="FONT-SIZE: 14pt" align=left><strong><font face=宋体 color=#339900>C/C 中函数指针的含义</font></strong></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>作者：管宁</font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>　　函数存放在内存的代码区域内，他们同样有地址，我们如何能获得函数的地址呢？ <br><br>　　假如我们有一个int test(int a)的函数，那么，他的地址就是函数的名字，这一点如同数组相同，数组的名字就是数组的起始地址。 </font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>　　定义一个指向函数的指针用如下的形式，以上面的test()为例： </font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>int (*fp)(int a);//这里就定义了一个指向函数的指针 </font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>　　函数指针不能绝对不能指向不同类型，或是带不同形参的函数，在定义函数指针的时候我们很容易犯如下的错误。</font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>int *fp(int a);//这里是错误的，因为按照结合性和优先级来看就是先和()结合，然后变成了一个返回整形指针的函数了，而不是函数指针，这一点尤其需要注意！ </font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>　　下面我们来看一个具体的例子：</font></p>
<p class=code style="FONT-SIZE: 14pt" align=left><font face=宋体>#include &lt;<font color=#800000>iostream</font>&gt; <br>#include &lt;<font color=#800000>string</font>&gt; <br><font color=#0000ff>using</font> <font color=#0000ff>namespace</font> std; <br><br><font color=#0000ff>int</font> test(<font color=#0000ff>int</font> a); <br><br><font color=#0000ff>void</font> <font color=#0000ff>main</font>(<font color=#0000ff>int</font> <font color=#0000ff>argc</font>,<font color=#0000ff>char</font>* <font color=#0000ff>argv</font>[]) <br>{ <br><font color=#800000>cout</font>&lt;&lt;test&lt;&lt;endl;<font color=#008000>//显示函数地址 </font><br><font color=#0000ff>int</font> (*fp)(<font color=#0000ff>int</font> a); <br>fp=test;<font color=#008000>//将函数test的地址赋给函数学指针fp </font><br><font color=#800000>cout</font>&lt;&lt;fp(5)&lt;&lt;"|"&lt;&lt;(*fp)(10)&lt;&lt;endl; <br><font color=#008000>//上面的输出fp(5),这是标准c 的写法,(*fp)(10)这是兼容c语言的标准写法,两种同意,但注意区分,避免写的程式产生移植性问题! </font><br><font color=#800000>cin</font>.get(); <br>} <br><br><font color=#0000ff>int</font> test(<font color=#0000ff>int</font> a) <br>{ <br><font color=#0000ff>return</font> a; <br>}</font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>　　typedef定义能够简化函数指针的定义，在定义一个的时候感觉不出来，但定义多了就知道方便了，上面的代码改写成如下的形式：</font></p>
<p class=code style="FONT-SIZE: 14pt" align=left><font face=宋体>#include &lt;<font color=#800000>iostream</font>&gt; <br>#include &lt;<font color=#800000>string</font>&gt; <br><font color=#0000ff>using</font> <font color=#0000ff>namespace</font> std; <br><br><font color=#0000ff>int</font> test(<font color=#0000ff>int</font> a); <br><br><font color=#0000ff>void</font> <font color=#0000ff>main</font>(<font color=#0000ff>int</font> <font color=#0000ff>argc</font>,<font color=#0000ff>char</font>* <font color=#0000ff>argv</font>[]) <br>{ <br><font color=#800000>cout</font>&lt;&lt;test&lt;&lt;endl; <br><font color=#0000ff>typedef</font> <font color=#0000ff>int</font> (*fp)(<font color=#0000ff>int</font> a);<font color=#008000>//注意,这里不是生命函数指针,而是定义一个函数指针的类型,这个类型是自己定义的,类型名为fp </font><br>fp fpi;<font color=#008000>//这里利用自己定义的类型名fp定义了一个fpi的函数指针! </font><br>fpi=test; <br><font color=#800000>cout</font>&lt;&lt;fpi(5)&lt;&lt;"|"&lt;&lt;(*fpi)(10)&lt;&lt;endl; <br><font color=#800000>cin</font>.get(); <br>} <br><br><font color=#0000ff>int</font> test(<font color=#0000ff>int</font> a) <br>{ <br><font color=#0000ff>return</font> a; <br>} </font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>　　函数指针同样是能够作为参数传递给函数的，下面我们看个例子，仔细阅读您将会发现他的用处，稍加推理能够很方便我们进行一些复杂的编程工作。</font></p>
<p class=code style="FONT-SIZE: 14pt" align=left><font face=宋体><font color=#008000>//-------------------该例以上一个例子作为基础稍加了修改----------------------------- </font><br>#include &lt;<font color=#800000>iostream</font>&gt; <br>#include &lt;<font color=#800000>string</font>&gt; <br><font color=#0000ff>using</font> <font color=#0000ff>namespace</font> std; <br><br><font color=#0000ff>int</font> test(<font color=#0000ff>int</font>); <br><br><font color=#0000ff>int</font> test2(<font color=#0000ff>int</font> (*ra)(<font color=#0000ff>int<font color=#000000>),</font><font color=#0000ff>int</font><font color=#000000>);</font></font></font></p>
<p class=code style="FONT-SIZE: 14pt" align=left><font color=#0000ff><font face=宋体>void<font color=#000000> </font><font color=#0000ff>main</font><font color=#000000>(</font><font color=#0000ff>int</font><font color=#000000> </font><font color=#0000ff>argc</font><font color=#000000>,</font><font color=#0000ff>char</font><font color=#000000>* </font><font color=#0000ff>argv</font></font><font face=宋体><font color=#000000>[]) <br>{ <br></font><font color=#800000>cout</font></font><font face=宋体><font color=#000000>&lt;&lt;test&lt;&lt;endl; <br></font><font color=#0000ff>typedef</font><font color=#000000> </font><font color=#0000ff>int</font><font color=#000000> (*fp)(</font><font color=#0000ff>int</font></font><font face=宋体><font color=#000000>); <br>fp fpi; <br>fpi=test;</font><font color=#008000>//fpi赋予test 函数的内存地址 </font><br><br><font color=#800000>cout</font><font color=#000000>&lt;&lt;test2(fpi,1)&lt;&lt;endl;</font><font color=#008000>//这里调用test2函数的时候,这里把fpi所存储的函数地址(test的函数地址)传递了给test2的第一个形参 </font><br><font color=#800000>cin</font></font><font face=宋体><font color=#000000>.get(); <br>} <br><br></font><font color=#0000ff>int</font><font color=#000000> test(</font><font color=#0000ff>int</font></font><font face=宋体><font color=#000000> a) <br>{ <br></font><font color=#0000ff>return</font></font><font face=宋体><font color=#000000> a-1; <br>} <br><br></font><font color=#0000ff>int</font><font color=#000000> test2(</font><font color=#0000ff>int</font><font color=#000000> (*ra)(</font><font color=#0000ff>int</font><font color=#000000>),</font><font color=#0000ff>int</font><font color=#000000> b)</font><font color=#008000>//这里定义了一个名字为ra的函数指针 </font><br></font><font face=宋体><font color=#000000>{ <br></font><font color=#0000ff>int</font><font color=#000000> c=ra(10) b;</font><font color=#008000>//在调用之后,ra已指向fpi所指向的函数地址即test函数 </font><br><font color=#0000ff>return</font></font><font face=宋体 color=#000000> c; <br>} </font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体></font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>　　利用函数指针，我们能够构成指针数组，更明确点的说法是构成指向函数的指针数组，这么说可能就容易理解的多了。</font></p>
<p class=code style="FONT-SIZE: 14pt" align=left><font face=宋体>#include &lt;<font color=#800000>iostream</font>&gt; <br>#include &lt;<font color=#800000>string</font>&gt; <br><font color=#0000ff>using</font> <font color=#0000ff>namespace</font> std; <br><br><font color=#0000ff>void</font> t1(){<font color=#800000>cout</font>&lt;&lt;"test1";} <br><font color=#0000ff>void</font> t2(){<font color=#800000>cout</font>&lt;&lt;"test2";} <br><font color=#0000ff>void</font> t3(){<font color=#800000>cout</font>&lt;&lt;"test3";} <br><font color=#0000ff>void</font> <font color=#0000ff>main</font>(<font color=#0000ff>int</font> <font color=#0000ff>argc</font>,<font color=#0000ff>char</font>* <font color=#0000ff>argv</font>[]) <br>{ <br><font color=#0000ff>void</font>* a[]={t1,t2,t3}; <br><font color=#800000>cout</font>&lt;&lt;"比较t1()的内存地址和数组a[0]所存储的地址是否一致"&lt;&lt;t1&lt;&lt;"|"&lt;&lt;a[0]&lt;&lt;endl; <br><br><font color=#800000>cout</font>&lt;&lt;a[0]();<font color=#008000>//错误!指针数组是不能利用数组下标操作调用函数的 </font><br><br><font color=#0000ff>typedef</font> <font color=#0000ff>void</font> (*fp)();<font color=#008000>//自定义一个函数指针类型 </font><br>fp b[]={t1,t2,t3}; <font color=#008000>//利用自定义类型fp把b[]定义趁一个指向函数的指针数组 </font><br>b[0]();<font color=#008000>//现在利用指向函数的指针数组进行下标操作就能够进行函数的间接调用了; </font><br><font color=#800000>cin</font>.get(); <br>} </font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>　　仔细看上面的例子可能不用我多说大家也会知道是怎么一会事情了,最后我们做一个重点小结,只要记住这一点,对于理解利用函数指针构成数组进行函数间接调用就很容易了! </font></p>
<p class=code style="FONT-SIZE: 14pt" align=left><font face=宋体>void* a[]={t1,t2,t3}; <br>cout&lt;&lt;"比较t1()的内存地址和数组a[0]所存储的地址是否一致"&lt;&lt;t1&lt;&lt;"|"&lt;&lt;a[0]&lt;&lt;endl; <br><br>cout&lt;&lt;a[0]();//错误!指针数组是不能利用数组下标操作调用函数的 </font></p>
<p style="FONT-SIZE: 14pt" align=left><font face=宋体>　　上面的这一小段中的错误行，为什么不能这么调用呢？ <br><br>　　前一篇教程我们已说的很清楚了，但是在这里我们还是复习一下概念，指针数组元素所保存的只是个内存地址，既然只是个内存地址就不可能进行a[0]()这样地址带括号的操作，而函数指针不同他是个例外，函数指针只所以这么叫他就是因为他是指向函数指向内存的代码区的指针，他被系统授予允许和()括号操作的权利，进行间接的函数调用，既然函数指针允许这么操作，那么被定义成函数指针的数组就一定是能够相同的操作的。</font></p>
<div style="FONT-SIZE: 14pt" align=left><br><strong><font color=#000099>原文地址</font></strong> <a href="http://www.netinter.cn/info/html/chengxusheji/C-C--/20080224/11853.html" target=_blank><u><font color=#800080>http://www.netinter.cn/info/html/chengxusheji/C-C--/20080224/11853.html</font></u></a> </font></div>
<img src ="http://www.cppblog.com/xingkongyun/aggbug/52889.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xingkongyun/" target="_blank">杨彬彬</a> 2008-06-11 17:00 <a href="http://www.cppblog.com/xingkongyun/articles/52889.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>