﻿<?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++博客-小乌龟</title><link>http://www.cppblog.com/xiaowugui/</link><description>在梦想的道路上还能走多远</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:38:07 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:38:07 GMT</pubDate><ttl>60</ttl><item><title>为什么复制构造函数的参数必须为引用</title><link>http://www.cppblog.com/xiaowugui/archive/2012/04/23/172397.html</link><dc:creator>小乌龟</dc:creator><author>小乌龟</author><pubDate>Sun, 22 Apr 2012 16:21:00 GMT</pubDate><guid>http://www.cppblog.com/xiaowugui/archive/2012/04/23/172397.html</guid><wfw:comment>http://www.cppblog.com/xiaowugui/comments/172397.html</wfw:comment><comments>http://www.cppblog.com/xiaowugui/archive/2012/04/23/172397.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaowugui/comments/commentRss/172397.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaowugui/services/trackbacks/172397.html</trackback:ping><description><![CDATA[为什么复制构造函数的参数必须为引用呢，原因如下：<br /><div><div><p>&nbsp;&nbsp; Because if it's not by reference, it's by  value. To do that you make a copy, and to do that you call the copy  constructor. But to do that, we need to need to make a new value, so we  call the copy constructor, and so on...</p>  <p>(You would have infinite recursion because "to make a copy, you need to make a copy".)</p> </div></div>来源：<br /><div>http://stackoverflow.com/questions/2685854/why-should-the-copy-constructor-accept-its-parameter-by-reference-in-c</div><br />老忘记，举个例子也许更好理解：<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; ">创建Type类型的对象a</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">Type&nbsp;a;<br /><br /></span><span style="color: #008000; ">//</span><span style="color: #008000; ">对a的对象内部数据成员赋值</span><span style="color: #008000; "><br /></span><span style="color: #000000; "><img src="http://www.cppblog.com/Images/dot.gif" alt="" /><br /><br /></span><span style="color: #008000; ">// 调用复制构造函数创建对象b<br /></span><span style="color: #000000; ">Type&nbsp;b(&nbsp;a&nbsp;)<br /></span></div><br />由于b的复制构造函数的参数被定义为值传递，那么首先会创建一个Type的临时变量，假设为temp1，然后再传递给b的复制构造函数<br /><br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">Type&nbsp;temp1(&nbsp;a&nbsp;)<br /></span></div><br />由于temp1的复制构造函数的参数被定义为值传递，那么首先会创建一个Type的临时变量，假设为temp2，然后再传递给b的复制构造函数<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">Type&nbsp;temp2(&nbsp;a&nbsp;)</span></div><br />类推,会出现temp3,temp4,...直至无穷多！<br /><br />所以复制构造函数的参数必须为引用<img src ="http://www.cppblog.com/xiaowugui/aggbug/172397.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaowugui/" target="_blank">小乌龟</a> 2012-04-23 00:21 <a href="http://www.cppblog.com/xiaowugui/archive/2012/04/23/172397.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>获取Streaming output统计信息失败</title><link>http://www.cppblog.com/xiaowugui/archive/2011/05/09/146016.html</link><dc:creator>小乌龟</dc:creator><author>小乌龟</author><pubDate>Mon, 09 May 2011 04:47:00 GMT</pubDate><guid>http://www.cppblog.com/xiaowugui/archive/2011/05/09/146016.html</guid><wfw:comment>http://www.cppblog.com/xiaowugui/comments/146016.html</wfw:comment><comments>http://www.cppblog.com/xiaowugui/archive/2011/05/09/146016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaowugui/comments/commentRss/146016.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaowugui/services/trackbacks/146016.html</trackback:ping><description><![CDATA[<p>&nbsp;<span style="FONT-SIZE: 12pt; FONT-FAMILY: Lucida Console">&nbsp;&nbsp;<span style="FONT-SIZE: 10pt; FONT-FAMILY: Lucida Console">基于GPU的粒子系统的粒子数目一般等于stream output的图元数，而stream output的统计信息可以通过ID3D10Query接口获取。步骤如下：<br>1.创建ID3D10Query查询对象</span><br></span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 10pt; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; FONT-FAMILY: Lucida Console; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">ID3D10Query</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pQuery;<br></span><span style="COLOR: #008080">2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>D3D10_QUERY_DESC&nbsp;queryDesc;<br></span><span style="COLOR: #008080">3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>queryDesc.Query&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;D3D10_QUERY_SO_STATISTICS;<br></span><span style="COLOR: #008080">4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>queryDesc.MiscFlags&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">5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>pD3DDevice</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">CreateQuery(&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">queryDesc,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">pQuery&nbsp;);</span></div>
<span style="FONT-FAMILY: Lucida Console">&nbsp;&nbsp;&nbsp;<br>2.在用DrawAuto()绘制粒子处设置查询的开始和结束标记：</span><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; FONT-FAMILY: Lucida Console; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">pQuery</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Begin();<br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">pD3DDevice</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">DrawAuto();&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;绘制粒子</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">pQuery</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">End();</span></div>
<br><span style="FONT-FAMILY: Lucida Console">3. 获取Stream Output输出的图元个数：<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">1</span>&nbsp;<span style="COLOR: #000000">D3D10_QUERY_DATA_SO_STATISTICS&nbsp;streamOutBufferSize;<br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;S_OK&nbsp;=</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pQuery</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetData(&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">streamOutBufferSize,&nbsp;pQuery</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetDataSize(),&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;)&nbsp;)&nbsp; <span style="COLOR: #008000">// 错误产生的原因<br></span></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">4</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;mStreamOutParticleSize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(unsigned)streamOutBufferSize.NumPrimitivesWritten;<br></span><span style="COLOR: #008080">5</span>&nbsp;<span style="COLOR: #000000">}</span></div>
</span>&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可是试验的时候，发现获取的粒子数目不正确。调试后发现<font style="FONT-FAMILY: Lucida Console" face="Lucida Console">ID3D10Query::GetData()总返回S_FALSE，但极少数情况下也返回S_OK。参考文献1后明白，ID3D10Query接口是异步从GPU获取数据的,当GPU中繁忙或者查询的数据没有准备好，就会返回S_FALSE。正确的做法是：如果ID3D10Query::GetData()返回失败，则继续查询，直到成功为止。正确的完整代码如下：<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>&nbsp;<span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;创建ID3D10Query查询对象</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;2</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">ID3D10Query</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pQuery;<br></span><span style="COLOR: #008080">&nbsp;3</span>&nbsp;<span style="COLOR: #000000">D3D10_QUERY_DESC&nbsp;queryDesc;<br></span><span style="COLOR: #008080">&nbsp;4</span>&nbsp;<span style="COLOR: #000000">queryDesc.Query&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;D3D10_QUERY_SO_STATISTICS;<br></span><span style="COLOR: #008080">&nbsp;5</span>&nbsp;<span style="COLOR: #000000">queryDesc.MiscFlags&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">&nbsp;6</span>&nbsp;<span style="COLOR: #000000">pD3DDevice</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">CreateQuery(&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">queryDesc,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">pQuery&nbsp;);<br></span><span style="COLOR: #008080">&nbsp;7</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;8</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;设置查询的开始和结束标志</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">&nbsp;9</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">pQuery</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Begin();<br></span><span style="COLOR: #008080">10</span>&nbsp;<span style="COLOR: #000000">pD3DDevice</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">DrawAuto();<br></span><span style="COLOR: #008080">11</span>&nbsp;<span style="COLOR: #000000">pQuery</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">End();<br></span><span style="COLOR: #008080">12</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">13</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;获取stream&nbsp;output输出的图元个数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">14</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">D3D10_QUERY_DATA_SO_STATISTICS&nbsp;streamOutBufferSize;<br></span><span style="COLOR: #008080">15</span>&nbsp;<span style="COLOR: #000000"></span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(&nbsp;S_OK&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;pQuery</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetData(&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">streamOutBufferSize,&nbsp;pQuery</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetDataSize(),&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;)&nbsp;);&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;不停循环，直到成功</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">16</span>&nbsp;<span style="COLOR: #008000"></span><span style="COLOR: #000000">mStreamOutParticleSize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(unsigned)streamOutBufferSize.NumPrimitivesWritten;</span></div>
&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;参考资料：<br>&nbsp;&nbsp;&nbsp;1. Get&nbsp;streaming output statistics:&nbsp;<a href="http://www.bennychen.cn/2009/07/get-streaming-output-statistics/">http://www.bennychen.cn/2009/07/get-streaming-output-statistics/</a><br></font>
<img src ="http://www.cppblog.com/xiaowugui/aggbug/146016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaowugui/" target="_blank">小乌龟</a> 2011-05-09 12:47 <a href="http://www.cppblog.com/xiaowugui/archive/2011/05/09/146016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PIX Experiment File Version Mismatch</title><link>http://www.cppblog.com/xiaowugui/archive/2011/05/08/145923.html</link><dc:creator>小乌龟</dc:creator><author>小乌龟</author><pubDate>Sat, 07 May 2011 16:48:00 GMT</pubDate><guid>http://www.cppblog.com/xiaowugui/archive/2011/05/08/145923.html</guid><wfw:comment>http://www.cppblog.com/xiaowugui/comments/145923.html</wfw:comment><comments>http://www.cppblog.com/xiaowugui/archive/2011/05/08/145923.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaowugui/comments/commentRss/145923.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaowugui/services/trackbacks/145923.html</trackback:ping><description><![CDATA[<p style="FONT-FAMILY: Lucida Console">&nbsp;&nbsp;&nbsp;使用PIX调试Direct3D程序时，PIX出错不能运行，如下图所示：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img height=248 alt="" src="http://www.cppblog.com/images/cppblog_com/xiaowugui/mm.jpg" width=540 align=middle border=0><br>&nbsp;&nbsp;&nbsp;原因是PIX调试的程序的路径必须是英文，解决办法是修改被调试的程序的路径，使之不包含中文。<br><br>&nbsp;&nbsp;&nbsp;参考文献：<br>&nbsp;&nbsp;&nbsp;PIX调式shader傻瓜教程：<a href="http://blog.csdn.net/rabbit729/archive/2011/01/14/6139308.aspx">http://blog.csdn.net/rabbit729/archive/2011/01/14/6139308.aspx</a><br>&nbsp;&nbsp;&nbsp;Direct3D程序调试技巧：<a href="http://hi.baidu.com/xiexianyu/blog/item/6a6944ec84bd9fdd2f2e21ab.html">http://hi.baidu.com/xiexianyu/blog/item/6a6944ec84bd9fdd2f2e21ab.html</a><br>&nbsp;&nbsp;&nbsp;</p>
<img src ="http://www.cppblog.com/xiaowugui/aggbug/145923.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaowugui/" target="_blank">小乌龟</a> 2011-05-08 00:48 <a href="http://www.cppblog.com/xiaowugui/archive/2011/05/08/145923.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言获取文件大小</title><link>http://www.cppblog.com/xiaowugui/archive/2010/10/22/130863.html</link><dc:creator>小乌龟</dc:creator><author>小乌龟</author><pubDate>Fri, 22 Oct 2010 03:22:00 GMT</pubDate><guid>http://www.cppblog.com/xiaowugui/archive/2010/10/22/130863.html</guid><wfw:comment>http://www.cppblog.com/xiaowugui/comments/130863.html</wfw:comment><comments>http://www.cppblog.com/xiaowugui/archive/2010/10/22/130863.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaowugui/comments/commentRss/130863.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaowugui/services/trackbacks/130863.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;今天去面试，面试官问了个C中如何获取文件大小，想啊想，没有这个函数啊。那应该是用fseek将文件指针移动到文件末尾，然后通过文件指针获取吧？但是什么函数呢，没印象，汗......<br>&nbsp;&nbsp;&nbsp;回来查了下，原来是ftell，悲剧啊，以前没用过！MSDN上ftell的功能如下：Gets the current position of a file pointer。写了段代码测试了下，代码如下：<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">#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><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><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><img id=Codehighlighter1_31_305_Open_Image onclick="this.style.display='none'; Codehighlighter1_31_305_Open_Text.style.display='none'; Codehighlighter1_31_305_Closed_Image.style.display='inline'; Codehighlighter1_31_305_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_31_305_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_31_305_Closed_Text.style.display='none'; Codehighlighter1_31_305_Open_Image.style.display='inline'; Codehighlighter1_31_305_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_31_305_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_31_305_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">long</span><span style="COLOR: #000000">&nbsp;fileSize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;FILE</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pFile&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fopen(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">mm.data</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">r</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;);<br><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;pFile&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;NULL&nbsp;)<br><img id=Codehighlighter1_118_155_Open_Image onclick="this.style.display='none'; Codehighlighter1_118_155_Open_Text.style.display='none'; Codehighlighter1_118_155_Closed_Image.style.display='inline'; Codehighlighter1_118_155_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_118_155_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_118_155_Closed_Text.style.display='none'; Codehighlighter1_118_155_Open_Image.style.display='inline'; Codehighlighter1_118_155_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_118_155_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_118_155_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;printf(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Open&nbsp;File&nbsp;Error\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br><img id=Codehighlighter1_164_292_Open_Image onclick="this.style.display='none'; Codehighlighter1_164_292_Open_Text.style.display='none'; Codehighlighter1_164_292_Closed_Image.style.display='inline'; Codehighlighter1_164_292_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_164_292_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_164_292_Closed_Text.style.display='none'; Codehighlighter1_164_292_Open_Image.style.display='inline'; Codehighlighter1_164_292_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_164_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_164_292_Open_Text><span style="COLOR: #000000">{&nbsp;<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: #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(&nbsp;pFile,&nbsp;</span><span style="COLOR: #000000">0L</span><span style="COLOR: #000000">,&nbsp;SEEK_END&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileSize&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;ftell(&nbsp;pFile&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">file&nbsp;size:&nbsp;%ld\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;fileSize&nbsp;);&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><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><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/xiaowugui/aggbug/130863.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaowugui/" target="_blank">小乌龟</a> 2010-10-22 11:22 <a href="http://www.cppblog.com/xiaowugui/archive/2010/10/22/130863.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DirectX9获取深度缓存值</title><link>http://www.cppblog.com/xiaowugui/archive/2010/01/06/104962.html</link><dc:creator>小乌龟</dc:creator><author>小乌龟</author><pubDate>Wed, 06 Jan 2010 11:02:00 GMT</pubDate><guid>http://www.cppblog.com/xiaowugui/archive/2010/01/06/104962.html</guid><wfw:comment>http://www.cppblog.com/xiaowugui/comments/104962.html</wfw:comment><comments>http://www.cppblog.com/xiaowugui/archive/2010/01/06/104962.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaowugui/comments/commentRss/104962.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaowugui/services/trackbacks/104962.html</trackback:ping><description><![CDATA[<p style="FONT-SIZE: 18pt"><span style="FONT-FAMILY: Verdana"><span style="FONT-SIZE: 10pt">&nbsp;&nbsp;&nbsp;DirectX中，如何获取深度值，然后将它存储在一个txt文件中？其实只要修改两个地方：<br>&nbsp;&nbsp;&nbsp;第一个地方是：创建Direct3D设备时，将D3DPRESENT_PARAMETERS类型表示变量的AutoDepthStencilFormat设置为D3DFMT_D32F_LOCKABLE，代码如下：&nbsp;&nbsp;&nbsp;<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"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;D3DPRESENT_PARAMETERS&nbsp;d3dpp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.BackBufferWidth&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;width;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.BackBufferHeight&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;height;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.BackBufferFormat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;D3DFMT_A8R8G8B8;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.BackBufferCount&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.MultiSampleType&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;D3DMULTISAMPLE_NONE;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.MultiSampleQuality&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.SwapEffect&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;D3DSWAPEFFECT_DISCARD;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.hDeviceWindow&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;hwnd;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.Windowed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;windowed;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.EnableAutoDepthStencil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.AutoDepthStencilFormat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;D3DFMT_D32F_LOCKABLE;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;16位总不行</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.Flags&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.FullScreen_RefreshRateInHz&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;D3DPRESENT_RATE_DEFAULT;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;d3dpp.PresentationInterval&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;D3DPRESENT_INTERVAL_IMMEDIATE;</span></div>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"><br>&nbsp;&nbsp;&nbsp;第二个地方是：设置锁定缓存表面，并进行读写的代码：<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"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;获取深度模板表面</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HRESULT&nbsp;hr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;Device</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetDepthStencilSurface(&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">pZBuffer&nbsp;);<br><img id=Codehighlighter1_96_167_Open_Image onclick="this.style.display='none'; Codehighlighter1_96_167_Open_Text.style.display='none'; Codehighlighter1_96_167_Closed_Image.style.display='inline'; Codehighlighter1_96_167_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_96_167_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_96_167_Closed_Text.style.display='none'; Codehighlighter1_96_167_Open_Image.style.display='inline'; Codehighlighter1_96_167_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;FAILED(&nbsp;hr&nbsp;)&nbsp;)&nbsp;</span><span id=Codehighlighter1_96_167_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_96_167_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(&nbsp;NULL,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">GetDepthStencilSurface&nbsp;failure</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;);&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pFile&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;fopen(&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">ZBuffer.txt</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">w</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;);<br><img id=Codehighlighter1_248_298_Open_Image onclick="this.style.display='none'; Codehighlighter1_248_298_Open_Text.style.display='none'; Codehighlighter1_248_298_Closed_Image.style.display='inline'; Codehighlighter1_248_298_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_248_298_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_248_298_Closed_Text.style.display='none'; Codehighlighter1_248_298_Open_Image.style.display='inline'; Codehighlighter1_248_298_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;pFile&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;NULL&nbsp;)&nbsp;</span><span id=Codehighlighter1_248_298_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_248_298_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(&nbsp;NULL,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">shit</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;NULL,&nbsp;NULL);&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D3DSURFACE_DESC&nbsp;surfaceDesc;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pZBuffer</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">GetDesc(&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">surfaceDesc&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;D3DLOCKED_RECT&nbsp;lockRect;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hr&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;pZBuffer</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">LockRect(&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">lockRect,&nbsp;NULL,&nbsp;D3DLOCK_READONLY&nbsp;);<br><img id=Codehighlighter1_515_578_Open_Image onclick="this.style.display='none'; Codehighlighter1_515_578_Open_Text.style.display='none'; Codehighlighter1_515_578_Closed_Image.style.display='inline'; Codehighlighter1_515_578_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_515_578_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_515_578_Closed_Text.style.display='none'; Codehighlighter1_515_578_Open_Image.style.display='inline'; Codehighlighter1_515_578_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(&nbsp;FAILED(&nbsp;hr&nbsp;)&nbsp;)&nbsp;</span><span id=Codehighlighter1_515_578_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_515_578_Open_Text><span style="COLOR: #000000">{&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(&nbsp;NULL,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">GetDepthStencilSurface</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;);&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;pData&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">)lockRect.pBits;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;将深度信息输出到文件中</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_711_890_Open_Image onclick="this.style.display='none'; Codehighlighter1_711_890_Open_Text.style.display='none'; Codehighlighter1_711_890_Closed_Image.style.display='inline'; Codehighlighter1_711_890_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_711_890_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_711_890_Closed_Text.style.display='none'; Codehighlighter1_711_890_Open_Image.style.display='inline'; Codehighlighter1_711_890_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;y&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;surfaceDesc.Height;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">y&nbsp;)&nbsp;</span><span id=Codehighlighter1_711_890_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_711_890_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_762_858_Open_Image onclick="this.style.display='none'; Codehighlighter1_762_858_Open_Text.style.display='none'; Codehighlighter1_762_858_Closed_Image.style.display='inline'; Codehighlighter1_762_858_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_762_858_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_762_858_Closed_Text.style.display='none'; Codehighlighter1_762_858_Open_Image.style.display='inline'; Codehighlighter1_762_858_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;&nbsp;x&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;surfaceDesc.Width;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">x&nbsp;)&nbsp;</span><span id=Codehighlighter1_762_858_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_762_858_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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;index&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;y&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;lockRect.Pitch&nbsp;</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;x;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(&nbsp;pFile,&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%f&nbsp;&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;pData[index]&nbsp;);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(&nbsp;pFile,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pZBuffer</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">UnlockRect();&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pZBuffer</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Release();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fclose(&nbsp;pFile&nbsp;);</span></div>
<p style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"><br></span></span></p>
<img src ="http://www.cppblog.com/xiaowugui/aggbug/104962.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaowugui/" target="_blank">小乌龟</a> 2010-01-06 19:02 <a href="http://www.cppblog.com/xiaowugui/archive/2010/01/06/104962.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual C++.NET技术内幕的第一个例子在VS2005下编译出现的问题</title><link>http://www.cppblog.com/xiaowugui/archive/2009/05/09/82423.html</link><dc:creator>小乌龟</dc:creator><author>小乌龟</author><pubDate>Sat, 09 May 2009 13:43:00 GMT</pubDate><guid>http://www.cppblog.com/xiaowugui/archive/2009/05/09/82423.html</guid><wfw:comment>http://www.cppblog.com/xiaowugui/comments/82423.html</wfw:comment><comments>http://www.cppblog.com/xiaowugui/archive/2009/05/09/82423.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaowugui/comments/commentRss/82423.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaowugui/services/trackbacks/82423.html</trackback:ping><description><![CDATA[&nbsp;
<p><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>文件</span><span> -&gt; </span><span>新建</span><span> -&gt; </span><span>项目</span><span> -&gt; Win32 -&gt; Win32</span><span>项目</span></p>
<p><span>敲入书上代码后，编译，出错：</span></p>
<p><span>atal error C1189: #error :&nbsp;Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]</span></p>
<p><span>这是因为</span><span>vs2005</span><span>默认使用</span><span>window </span><span>标准库。</span></p>
<p><span>项目</span><span> -&gt; </span><span>属性</span><span> -&gt; </span><span>配置属性</span><span> -&gt; </span><span>常规</span><span> -&gt; MFC</span><span>的使用：</span></p>
<p><span>将</span><span>&#8221;</span><span>使用标准</span><span>Windows</span><span>库</span><span>&#8221;</span><span>改为</span><span>&#8221;</span><span>在共享</span><span>DLL</span><span>中使用</span><span>MFC&#8221;</span></p>
<p><span>编译，继续出错：</span></p>
<p>&nbsp;<span>'CFrameWnd::Create' : cannot convert parameter 2 from 'const char [15]' to 'LPCTSTR'</span></p>
<p><span>这是因为</span><span>vs2005</span><span>建立的</span><span>Win32</span><span>项目默认使用</span><span>Unicode</span><span>。</span></p>
<p><span>项目</span><span> -&gt; </span><span>属性</span><span> -&gt; </span><span>配置属性</span><span> -&gt; </span><span>常规</span><span> -&gt; </span><span>字符集：</span></p>
<p><span>将</span><span> <span>&#8221;</span></span><span>使用</span><span>Unicode</span><span>字符集</span><span>&#8221; </span><span>改为</span><span> <span>&#8221;</span></span><span>未设置</span><span>&#8221;</span><span>。<br><br></span></p>
<p>&nbsp;<span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>文件</span><span> -&gt; </span><span>新建</span><span> -&gt; </span><span>项目</span><span> -&gt; </span><span>常规</span><span> -&gt; </span><span>空项目：</span></p>
<p><span>不仅会出现上面的问题，编译时还会出现：</span><span> <span>&#8220;fatal error LNK1561: </span></span><span>必须定义入口点</span><span>&#8221;</span><span>。</span></p>
<p><span>解决办法：</span><span>目</span><span> -&gt; </span><span>属性</span><span> -&gt; </span><span>配置属性</span><span> <span>-&gt; </span></span><span>连接器</span><span> -&gt; </span><span>高级</span><span> -&gt; </span><span>入口点：添加</span><span>&#8221;WinMainCRTStartup&#8221;</span></p>
<p><span>而后还会出现一个窗口，提示无调试信息，关掉此窗口即可。为什么会出现的问题，就不知道为什么了。</span></p>
<img src ="http://www.cppblog.com/xiaowugui/aggbug/82423.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaowugui/" target="_blank">小乌龟</a> 2009-05-09 21:43 <a href="http://www.cppblog.com/xiaowugui/archive/2009/05/09/82423.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>string中的+, =, +=</title><link>http://www.cppblog.com/xiaowugui/archive/2008/11/23/67668.html</link><dc:creator>小乌龟</dc:creator><author>小乌龟</author><pubDate>Sun, 23 Nov 2008 08:14:00 GMT</pubDate><guid>http://www.cppblog.com/xiaowugui/archive/2008/11/23/67668.html</guid><wfw:comment>http://www.cppblog.com/xiaowugui/comments/67668.html</wfw:comment><comments>http://www.cppblog.com/xiaowugui/archive/2008/11/23/67668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaowugui/comments/commentRss/67668.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaowugui/services/trackbacks/67668.html</trackback:ping><description><![CDATA[<p><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: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br>{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;s;<br>&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;s&nbsp;</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">bc</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;&nbsp;<br>&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">s:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;s&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&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></div>
<br>对不？当然对的！参看basic_string.h中的源码：<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: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;basic_string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;basic_string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;__str)&nbsp;{&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">append(__str);&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@brief&nbsp;&nbsp;Append&nbsp;a&nbsp;C&nbsp;string.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@param&nbsp;s&nbsp;&nbsp;The&nbsp;C&nbsp;string&nbsp;to&nbsp;append.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@return&nbsp;&nbsp;Reference&nbsp;to&nbsp;this&nbsp;string.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;basic_string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;_CharT</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;__s)&nbsp;{&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">append(__s);&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@brief&nbsp;&nbsp;Append&nbsp;a&nbsp;character.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@param&nbsp;s&nbsp;&nbsp;The&nbsp;character&nbsp;to&nbsp;append.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@return&nbsp;&nbsp;Reference&nbsp;to&nbsp;this&nbsp;string.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;basic_string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">(_CharT&nbsp;__c)&nbsp;{&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">append(size_type(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">),&nbsp;__c);&nbsp;}</span></div>
<br>下面的代码对不？<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: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;s1;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;s1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;=&nbsp;也定义了右边的值为字符的情况&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&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">s1:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;s1&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;s1&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">bc</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&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">s1:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;s1&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;</span></div>
<br>看源码！<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: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;basic_string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;basic_string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">&nbsp;__str)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">assign(__str);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@brief&nbsp;&nbsp;Copy&nbsp;contents&nbsp;of&nbsp;@a&nbsp;s&nbsp;into&nbsp;this&nbsp;string.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@param&nbsp;&nbsp;s&nbsp;&nbsp;Source&nbsp;null-terminated&nbsp;string.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;basic_string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;_CharT</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;__s)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">assign(__s);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@brief&nbsp;&nbsp;Set&nbsp;value&nbsp;to&nbsp;string&nbsp;of&nbsp;length&nbsp;1.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@param&nbsp;&nbsp;c&nbsp;&nbsp;Source&nbsp;character.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;Assigning&nbsp;to&nbsp;a&nbsp;character&nbsp;makes&nbsp;this&nbsp;string&nbsp;length&nbsp;1&nbsp;and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;(*this)[0]&nbsp;==&nbsp;@a&nbsp;c.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;basic_string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">(_CharT&nbsp;__c)&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">assign(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,&nbsp;__c);&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br>下面的呢<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: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;s2(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">u</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;s2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">j</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;s2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&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">s2:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;s2&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;s2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;s2&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;<br>&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">s2:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;s2&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;s2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">jin&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;s2;<br>&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">s2:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;s2&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;s2&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;s2&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;xia</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&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">s2:&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;s2&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;</span></div>
<br>还是源码！<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: #008000">//</span><span style="COLOR: #008000">&nbsp;operator+</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@brief&nbsp;&nbsp;Concatenate&nbsp;two&nbsp;strings.<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@param&nbsp;lhs&nbsp;&nbsp;First&nbsp;string.<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@param&nbsp;rhs&nbsp;&nbsp;Last&nbsp;string.<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@return&nbsp;&nbsp;New&nbsp;string&nbsp;with&nbsp;value&nbsp;of&nbsp;@a&nbsp;lhs&nbsp;followed&nbsp;by&nbsp;@a&nbsp;rhs.<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;template</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typename&nbsp;_CharT,&nbsp;typename&nbsp;_Traits,&nbsp;typename&nbsp;_Alloc</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;basic_string</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">_CharT,&nbsp;_Traits,&nbsp;_Alloc</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;basic_string</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">_CharT,&nbsp;_Traits,&nbsp;_Alloc</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;__lhs,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;basic_string</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">_CharT,&nbsp;_Traits,&nbsp;_Alloc</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;__rhs)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;basic_string</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">_CharT,&nbsp;_Traits,&nbsp;_Alloc</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;__str(__lhs);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__str.append(__rhs);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;__str;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@brief&nbsp;&nbsp;Concatenate&nbsp;C&nbsp;string&nbsp;and&nbsp;string.<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@param&nbsp;lhs&nbsp;&nbsp;First&nbsp;string.<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@param&nbsp;rhs&nbsp;&nbsp;Last&nbsp;string.<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@return&nbsp;&nbsp;New&nbsp;string&nbsp;with&nbsp;value&nbsp;of&nbsp;@a&nbsp;lhs&nbsp;followed&nbsp;by&nbsp;@a&nbsp;rhs.<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;template</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typename&nbsp;_CharT,&nbsp;typename&nbsp;_Traits,&nbsp;typename&nbsp;_Alloc</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;basic_string</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">_CharT,_Traits,_Alloc</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;_CharT</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;__lhs,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;basic_string</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">_CharT,_Traits,_Alloc</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;__rhs);<br><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@brief&nbsp;&nbsp;Concatenate&nbsp;character&nbsp;and&nbsp;string.<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@param&nbsp;lhs&nbsp;&nbsp;First&nbsp;string.<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@param&nbsp;rhs&nbsp;&nbsp;Last&nbsp;string.<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@return&nbsp;&nbsp;New&nbsp;string&nbsp;with&nbsp;@a&nbsp;lhs&nbsp;followed&nbsp;by&nbsp;@a&nbsp;rhs.<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;template</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typename&nbsp;_CharT,&nbsp;typename&nbsp;_Traits,&nbsp;typename&nbsp;_Alloc</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;basic_string</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">_CharT,_Traits,_Alloc</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(_CharT&nbsp;__lhs,&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;basic_string</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">_CharT,_Traits,_Alloc</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;__rhs);<br><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@brief&nbsp;&nbsp;Concatenate&nbsp;string&nbsp;and&nbsp;C&nbsp;string.<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@param&nbsp;lhs&nbsp;&nbsp;First&nbsp;string.<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@param&nbsp;rhs&nbsp;&nbsp;Last&nbsp;string.<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@return&nbsp;&nbsp;New&nbsp;string&nbsp;with&nbsp;@a&nbsp;lhs&nbsp;followed&nbsp;by&nbsp;@a&nbsp;rhs.<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;template</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typename&nbsp;_CharT,&nbsp;typename&nbsp;_Traits,&nbsp;typename&nbsp;_Alloc</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;inline&nbsp;basic_string</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">_CharT,&nbsp;_Traits,&nbsp;_Alloc</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;basic_string</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">_CharT,&nbsp;_Traits,&nbsp;_Alloc</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;__lhs,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;_CharT</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;__rhs)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;basic_string</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">_CharT,&nbsp;_Traits,&nbsp;_Alloc</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;__str(__lhs);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__str.append(__rhs);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;__str;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;</span><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">*<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@brief&nbsp;&nbsp;Concatenate&nbsp;string&nbsp;and&nbsp;character.<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@param&nbsp;lhs&nbsp;&nbsp;First&nbsp;string.<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@param&nbsp;rhs&nbsp;&nbsp;Last&nbsp;string.<br>&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;@return&nbsp;&nbsp;New&nbsp;string&nbsp;with&nbsp;@a&nbsp;lhs&nbsp;followed&nbsp;by&nbsp;@a&nbsp;rhs.<br>&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;template</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typename&nbsp;_CharT,&nbsp;typename&nbsp;_Traits,&nbsp;typename&nbsp;_Alloc</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;inline&nbsp;basic_string</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">_CharT,&nbsp;_Traits,&nbsp;_Alloc</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">operator</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;basic_string</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">_CharT,&nbsp;_Traits,&nbsp;_Alloc</span><span style="COLOR: #000000">&gt;&amp;</span><span style="COLOR: #000000">&nbsp;__lhs,&nbsp;_CharT&nbsp;__rhs)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;basic_string</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">_CharT,&nbsp;_Traits,&nbsp;_Alloc</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;__string_type;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;typename&nbsp;__string_type::size_type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__size_type;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__string_type&nbsp;__str(__lhs);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__str.append(__size_type(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">),&nbsp;__rhs);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;__str;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br></span></div>
<br>也许，最好的资料就是看看头文件或者源码！<br><br><br>
<img src ="http://www.cppblog.com/xiaowugui/aggbug/67668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaowugui/" target="_blank">小乌龟</a> 2008-11-23 16:14 <a href="http://www.cppblog.com/xiaowugui/archive/2008/11/23/67668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>两次CTRL+Z才能中止程序</title><link>http://www.cppblog.com/xiaowugui/archive/2008/10/26/65100.html</link><dc:creator>小乌龟</dc:creator><author>小乌龟</author><pubDate>Sun, 26 Oct 2008 08:34:00 GMT</pubDate><guid>http://www.cppblog.com/xiaowugui/archive/2008/10/26/65100.html</guid><wfw:comment>http://www.cppblog.com/xiaowugui/comments/65100.html</wfw:comment><comments>http://www.cppblog.com/xiaowugui/archive/2008/10/26/65100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaowugui/comments/commentRss/65100.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaowugui/services/trackbacks/65100.html</trackback:ping><description><![CDATA[<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: #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><br>main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;c;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%c</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">c)&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;EOF)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%c</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;c);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&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></div>
<p><span id=topicSubject csdnid="topicSubject"></span>&nbsp;</p>
一段很让人不爽的代码，为什么要输入两次Ctrl+Z呢。只能说是VC6.0和C-Free的bug, 谁知道了告诉我一声。其他人的讨论：<br>&nbsp;&nbsp;&nbsp; <a href="http://topic.csdn.net/u/20080429/22/dcd3aba2-0cad-4c56-aeb2-2be7d3b07d44.html">http://topic.csdn.net/u/20080429/22/dcd3aba2-0cad-4c56-aeb2-2be7d3b07d44.html</a><br>&nbsp;&nbsp;&nbsp; <br>
<img src ="http://www.cppblog.com/xiaowugui/aggbug/65100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaowugui/" target="_blank">小乌龟</a> 2008-10-26 16:34 <a href="http://www.cppblog.com/xiaowugui/archive/2008/10/26/65100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cout &lt;&lt; &amp;("abc") &lt;&lt; endl解析</title><link>http://www.cppblog.com/xiaowugui/archive/2008/09/09/61349.html</link><dc:creator>小乌龟</dc:creator><author>小乌龟</author><pubDate>Mon, 08 Sep 2008 17:27:00 GMT</pubDate><guid>http://www.cppblog.com/xiaowugui/archive/2008/09/09/61349.html</guid><wfw:comment>http://www.cppblog.com/xiaowugui/comments/61349.html</wfw:comment><comments>http://www.cppblog.com/xiaowugui/archive/2008/09/09/61349.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaowugui/comments/commentRss/61349.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaowugui/services/trackbacks/61349.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;<span style="FONT-SIZE: 10pt">&nbsp;ChinaUnix上看到有人问了一个问题,程序代码如下:</span><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: #000000">cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">abc</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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;输出abc</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">abc</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;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;输出abc</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">abc</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;<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;输出abc，好像无论在"abc"前加几个&amp;，输出都为abc<br></span></div>
&nbsp;&nbsp;&nbsp;<span style="FONT-SIZE: 10pt">一个人的评价:<br>&nbsp;&nbsp;&nbsp;数组char str[]在内存中存储方式:str和&amp;str是同一个值,也就是说str本身在内存中没有占用空间,str、&amp;str和&amp;str[0]的值是一样的，只是直接给str[]的数组元素分配了空间。指针char *str在内存中的存储方式：首先会给str变量本身分配空间，也就是说str和&amp;str的值肯定是不一样的，&amp;str就是str的地址，在指针初始化后才给指针char *str所指向的字符串明确的分配空间，当然这个空间的首地址就是str的值。所以数组和指针还是有区别的，只是编译器对指针的处理是按照处理数组的方式来处理的。<br>&nbsp;&nbsp;这个评价真的是那么正确吗?<br>&nbsp;&nbsp;&nbsp;先分析代码:三个输出一样,是因为:取地址运算符只能用于内存中的对象,即变量和数组元素.它不能作用于表达式,常量或register类型的变量(The C Programming Language P93).<br>&nbsp;&nbsp;&nbsp;那么字符串常量的返回值是什么呢?是指针变量吗?不像!有人说:怎么不像了,当你把一个字符串常量作为一个参数传递给函数,其行为就像指针啊.那就想想数组,将数组名传递给函数,它的行为也像指针啊.可数组名终究不是指针,只不过作为函数参数时,其退化为了指针.是不是像数组,的确有那种味道.不信就看看下面的测试代码:<br></span>
<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: #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><br>main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">argv[])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p&nbsp;&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">xiexiu</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;s[]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">xiexiu</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%u\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">xiexiu</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%u\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">&nbsp;p);<br>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%u\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">&nbsp;s);<br>&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></div>
<span style="FONT-SIZE: 12pt">&nbsp;&nbsp;&nbsp;<span style="FONT-SIZE: 10pt">输出结果时:<br>&nbsp;&nbsp;&nbsp;7<br>&nbsp;&nbsp;&nbsp;4<br>&nbsp;&nbsp;&nbsp;7<br>&nbsp;&nbsp;&nbsp;既然这样的话,那么数组名是变量还是常量呢?数组名实质上是这个数组的首地址，一旦系统开辟了这块内存，那么这个内存的首地址就不能改变，所以，对数组名的赋值肯定是不允许的。数组名等同于常量，但是还有没有数组名就是常量的说法。这就说明了数组名绝不是变量,当然也不是数组元素了.因此对数组名取地址,要么是未定义,要么是非法的.对字符串常量取地址,很多编译器都可以通过,只是警告一番.因此对于数组str[],str和&amp;str是同一个值的说法是不对,因为&amp;str这个本身不合法或未定义的.<br>&nbsp;&nbsp;&nbsp;还有他说:所以数组和指针还是有区别的，只是编译器对指针的处理是按照处理数组的方式来处理的。数组当然和指针有区别了.数组名不是变量,而指针是.编译器对指针的处理是按照处理数组的方式来处理的吗?那么为什么用指针编写的程序比数组的快?<br>&nbsp;&nbsp;&nbsp;The C&nbsp;Programming Language P98:在计算数组元素a[i]的值时,C语言实际上先将其转换为*(a+i)的形式,然后再进行求值,这就说明了编译器对数组的处理是按照指针的方式来处理的.同时也说明了为什么用指针编写的程序比用数组编写的快.<br><br></span></span><br>
<img src ="http://www.cppblog.com/xiaowugui/aggbug/61349.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaowugui/" target="_blank">小乌龟</a> 2008-09-09 01:27 <a href="http://www.cppblog.com/xiaowugui/archive/2008/09/09/61349.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C-Free对程序命令行参数*的处理</title><link>http://www.cppblog.com/xiaowugui/archive/2008/09/06/61104.html</link><dc:creator>小乌龟</dc:creator><author>小乌龟</author><pubDate>Sat, 06 Sep 2008 03:42:00 GMT</pubDate><guid>http://www.cppblog.com/xiaowugui/archive/2008/09/06/61104.html</guid><wfw:comment>http://www.cppblog.com/xiaowugui/comments/61104.html</wfw:comment><comments>http://www.cppblog.com/xiaowugui/archive/2008/09/06/61104.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/xiaowugui/comments/commentRss/61104.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/xiaowugui/services/trackbacks/61104.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;用C-Free(使用默认的mingw编译器)编译一个程序的时候,出现了一个古怪的现象.MS如果一个程序有命令行参数且命令行参数中含有*,则编译器就会将*替换为本目录下的所有文件名,而用VC++6.0则不会出现以上的情况.</p>
&nbsp;&nbsp;&nbsp;测试了一番,的确如此.程序代码如下:<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: #008000">/*</span><span style="COLOR: #008000">&nbsp;包含头文件&nbsp;</span><span style="COLOR: #008000">*/</span><span style="COLOR: #000000">&nbsp;<br>#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><br>main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">argv[])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">&nbsp;(argc</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%s\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">argv</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&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></div>
&nbsp;&nbsp;&nbsp;用C-Free4.0(使用默认的mingw编译器)编译成expr.exe.然后将其放置于一个文件夹下,此时文件夹里含有两个文件:expr.exe和expr.txt.从命令行执行: expr.exe *,结果显示:<br>&nbsp;&nbsp;&nbsp;expr.exe<br>&nbsp;&nbsp;&nbsp;expr.exe<br>&nbsp;&nbsp;&nbsp;expr.txt<br><br>&nbsp;&nbsp;&nbsp;用VC++6.0编译成expr2.exe,然后将它移到此文件夹下,执行同样的命令: expr.exe *,结果如下:<br>&nbsp;&nbsp;&nbsp;expr2.exe<br>&nbsp;&nbsp;&nbsp;*&nbsp;<br><br>&nbsp;&nbsp;&nbsp;如果*不是作为一个单独的参数,而是作为一个参数的一部分,情况会怎样,执行命令:expr.exe 1*2,结果如下:<br>&nbsp;&nbsp;&nbsp;expr.exe<br>&nbsp;&nbsp;&nbsp;1*2<br>&nbsp;&nbsp;&nbsp;因此,在使用C-Free(默认编译器mingw)编译含有*命令行参数的程序,务必小心. 
<img src ="http://www.cppblog.com/xiaowugui/aggbug/61104.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/xiaowugui/" target="_blank">小乌龟</a> 2008-09-06 11:42 <a href="http://www.cppblog.com/xiaowugui/archive/2008/09/06/61104.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>