??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美一区二区日韩一区二区,丝袜一区二区三区,伊人春色之综合网http://www.aygfsteel.com/amenglai/category/43684.htmlzh-cnWed, 05 May 2010 13:58:22 GMTWed, 05 May 2010 13:58:22 GMT60Effecitive C++d了?/title><link>http://www.aygfsteel.com/amenglai/articles/320109.html</link><dc:creator>amenglai</dc:creator><author>amenglai</author><pubDate>Wed, 05 May 2010 03:31:00 GMT</pubDate><guid>http://www.aygfsteel.com/amenglai/articles/320109.html</guid><wfw:comment>http://www.aygfsteel.com/amenglai/comments/320109.html</wfw:comment><comments>http://www.aygfsteel.com/amenglai/articles/320109.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/amenglai/comments/commentRss/320109.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/amenglai/services/trackbacks/320109.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt">今天l于把这本书d了,泛型~程部分因ؓ(f)自己用的很少Q收货不大,其它部分读过以后Q的可以加q解,其是对照《C++ Primer》,在理解上?x)有很大的进步?br /> q本书,我读的时间很零碎Q一般只是早上读Q晚上回家因呼哧呼哧的写点东西,实在是没旉读,所以花的时间比较多?img src="/CuteSoft_Client/CuteEditor/images/face23.gif" align="absMiddle" border="0" alt="" />虽然很零,但是收货很大Q大概是因ؓ(f)从来没给自己讄M的deadlineQ没有压力,也就可以慢慢的读Q慢慢的思考?br /> 另外因ؓ(f)q本书更加关注的是语a的本w,所以肯定没有读PEAA之列的那么费Ԍ也很适合零碎的时间来阅读?br /> 哎,我写了这么多qJava都没读过Effecitive java。最后再感慨一下吧?br /> 明天Q我?x)回到我喜欢的javaQ去诅R设计模式精解》?br /> 依然是早上阅读,希望q次的阅读,能够Ҏ(gu)目前的代码重构有x的帮助?/span> <img src ="http://www.aygfsteel.com/amenglai/aggbug/320109.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/amenglai/" target="_blank">amenglai</a> 2010-05-05 11:31 <a href="http://www.aygfsteel.com/amenglai/articles/320109.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Effecitive C++MW记 Chapter4 设计与声?/title><link>http://www.aygfsteel.com/amenglai/articles/316139.html</link><dc:creator>amenglai</dc:creator><author>amenglai</author><pubDate>Mon, 22 Mar 2010 03:28:00 GMT</pubDate><guid>http://www.aygfsteel.com/amenglai/articles/316139.html</guid><wfw:comment>http://www.aygfsteel.com/amenglai/comments/316139.html</wfw:comment><comments>http://www.aygfsteel.com/amenglai/articles/316139.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/amenglai/comments/commentRss/316139.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/amenglai/services/trackbacks/316139.html</trackback:ping><description><![CDATA[  <h1>Item18 Make interfaces easy to use correctly and hard to use incorrectly.<span style="font-family: 宋体">让接口容易被正确使用Q不易被误用</span></h1> <h1><span style="font-weight: normal; font-size: 11pt; font-family: 宋体">好的接口设计应该是既Ҏ(gu)被正用,又不易被误用?/span></h1> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">׃如书中的</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Sample</span><span style="font-size: 11pt">Q关于时间的Q我们一般的做法是在创?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Day</span><span style="font-size: 11pt">对象Ӟq加校验函数来判断年月日是不是有效?/span></p> <h3><span style="font-family: 宋体">的做法一是:(x)创徏新的cd</span></h3> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">定义Q?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">class Month {</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">public:</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">   static Month Jan() {return Month(1); }</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">   static Month feb() {return Month(2); }</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">…</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">private Month(int m);</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">};</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Date d(Month::Mar(), Day(30), Year(1995) );</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">为啥不直接用静态变量?</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">参?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Item4 P30</span><span style="font-size: 11pt">Q简单说是不能保证在?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">non-local static objects</span><span style="font-size: 11pt">Ӟq个对象已l初始化了。如?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">non-local static objects</span><span style="font-size: 11pt">在另一个文件了Q又恰y没有初始化,pȝ当然׃(x)辫子了?/span></p> <h3><span style="font-family: 宋体">另一U方法:(x)加上</span>const<span style="font-family: 宋体">来限?/span>type<span style="font-family: 宋体">可以做的事情?/span></h3> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">先参?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Item3 P19</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">class Rational { </span><span style="font-size: 11pt">…</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">};</span></p> <p style="margin-bottom: 0pt"><strong><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">const</span></strong><span style="font-size: 11pt; font-family: 'Arial','sans-serif'"> Rational operator*(const Rational &lhs, const Rational &rhs);</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">之所以强制设|ؓ(f)</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">const</span><span style="font-size: 11pt">是Z避免</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">client</span><span style="font-size: 11pt">在用时出错。因为如果没?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">clien</span><span style="font-size: 11pt">Q那么:(x)</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Rational a,b,c;</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">…</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">(a*b)=c</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">q种写法是对的,但是如果</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">a</span><span style="font-size: 11pt">Q?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">b</span><span style="font-size: 11pt">是内|类型,q种写法是错误的?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; color: red">除非有必要,否则p保证你的cd</span><span style="font-size: 11pt; color: red; font-family: 'Arial','sans-serif'">type</span><span style="font-size: 11pt; color: red">的行为和内置cd一致?/span></p> <h3><span style="font-family: 宋体">一致性导致接口容易被正确使用?/span></h3> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">STL</span><span style="font-size: 11pt">是榜P</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">java</span><span style="font-size: 11pt">在这里成了反面教材,因ؓ(f)如果想知道容器内对象的数量,?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Array</span><span style="font-size: 11pt">Q要讉K属?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">length</span><span style="font-size: 11pt">Q?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">String</span><span style="font-size: 11pt">要用</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">length</span><span style="font-size: 11pt">函数Q?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">ArrayList</span><span style="font-size: 11pt">要用</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">size</span><span style="font-size: 11pt">函数Q这是不一致性?/span></p> <h3><span style="font-family: 宋体">使用</span>std::tr1::shared_ptr<span style="font-family: 宋体">Q消?/span>client<span style="font-family: 宋体">对资源管理的责Q</span></h3> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">扑և以下写法的两个易错的地方Q?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Investment* createInvestment();</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">1 </span><span style="font-size: 11pt">忘记删除</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">createInvestment()</span><span style="font-size: 11pt">q回的指?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">2 </span><span style="font-size: 11pt">删除q个指针多次</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">so</span><span style="font-size: 11pt">Q修改定义:(x)</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">std::tr1::shared_ptr< Investment > createInvestment();</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">如果出现q种情ŞQ从</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">createInvestment</span><span style="font-size: 11pt">得到</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Investment*</span><span style="font-size: 11pt">的函数要把这个指针传递个l叫?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">getRidOfInvestment</span><span style="font-size: 11pt">Q由</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">getridOfInvestment</span><span style="font-size: 11pt">取代使用</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">delete</span><span style="font-size: 11pt">?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">q里出C一个新?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">client</span><span style="font-size: 11pt">易错的点Q用h怼(x)使用错的资源释放机制。因?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">delete</span><span style="font-size: 11pt">?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">getRidOfInvestment</span><span style="font-size: 11pt">取代了?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">std::tr1::shared_ptr< Investment > </span></p> <p style="margin: 0cm 0cm 0pt 21.3pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">pInv(static_cast<Investment*>(0), getRidOfInvestment);</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">那么定义应该是q样的:(x)</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">std::tr1::shared_ptr< Investment > createInvestment()</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">{</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">   std::tr1::shared_ptr< Investment > </span></p> <p style="margin: 0cm 0cm 0pt 21.3pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">retVal(static_cast<Investment*>(0), getRidOfInvestment); <span style="color: red">//</span></span><span style="font-size: 11pt; color: red">q不能让</span><span style="font-size: 11pt; color: red; font-family: 'Arial','sans-serif'">client</span><span style="font-size: 11pt; color: red">来做</span></p> <p style="margin: 0cm 0cm 0pt 7.1pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">retVal = </span><span style="font-size: 11pt">…</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">;</span></p> <p style="margin: 0cm 0cm 0pt 7.1pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">return retVal;</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">}</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">tr1::shared_ptr</span><span style="font-size: 11pt">的优Ҏ(gu)允许在一?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">DLL</span><span style="font-size: 11pt">创徏对象Q在另一?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">DLL</span><span style="font-size: 11pt">里删除对象?/span></p> <h2><span style="font-family: 新宋?>牢记</span></h2> <ul style="margin-top: 0cm" type="disc"> <li style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Good interfaces are easy to use correctly and hard to use in correctly.</span></li> <li style="margin-bottom: 0pt"><span style="font-size: 11pt">接口一致性,于内|数据类型的行ؓ(f)兼容</span></li> <li style="margin-bottom: 0pt"><span style="font-size: 11pt">L错误的方式还包括创徏新的cdQ例?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Month</span><span style="font-size: 11pt">Q,限制cd上的操作Q束~对象|以及消除客户的资源管理的责Q</span></li> <li style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">tr1::shared_ptr</span><span style="font-size: 11pt">支持定制cd的删除器</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">deleter</span><span style="font-size: 11pt">Q允许在一?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">DLL</span><span style="font-size: 11pt">创徏对象Q在另一?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">DLL</span><span style="font-size: 11pt">里删除对象?/span></li> </ul> <h1>Item19<span style="font-family: 宋体">Q?/span>Treat class design as type design.<span style="font-family: 宋体">设计</span>class<span style="font-family: 宋体">犹如设计</span>type </h1> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">在设计一个类的时候,要回{一pd的问题哦?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">参考大师在</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">P85-P86</span><span style="font-size: 11pt">之间l出的常常的清单吧,其实实际上,我在设计cȝ时候的没有想q这么多Q问q自p么的Z么,所以这也是我L在追求代码重用,却L发现自己写的代码重用度很低的一个原因把?/span></p> <h1>Item20<span style="font-family: 宋体">Q?/span>Prefer pass-by-reference-to-const to pass-by-value.<span style="font-family: 宋体">宁以</span>pass-by-reference-to-const<span style="font-family: 宋体">替换</span>pass-by-value </h1> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; color: #993300; font-family: 'Arial','sans-serif'">But</span><span style="font-size: 11pt; color: #993300">先学?fn)一个单词,</span><span style="font-size: 11pt; color: #993300; font-family: 'Arial','sans-serif'">characteristic</span><span style="font-size: 11pt; color: #993300">Q?/span><span style="font-size: 11pt; color: #993300; font-family: 'Arial','sans-serif'">KAO</span><span style="font-size: 11pt; color: #993300">Q这竟然是个名词?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; color: #993300">再学一个地道的说法Q解决问题的Ҏ(gu)Q?/span><u><span style="font-size: 11pt; color: #993300; font-family: 'Arial','sans-serif'">The way around the slicing problem is…</span></u></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">函数都是g递?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">pass by-value</span><span style="font-size: 11pt">?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">function parameters are initialized with copies of the actual arguments, and function callers goes back a copy of the value returned by the function.</span><span style="font-size: 11pt">q样当然开销大了,每次都先</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">copy</span><span style="font-size: 11pt">一份进来,完事以后Q再</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">copy</span><span style="font-size: 11pt">一份出厅R?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">假设函数的参数是一?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Student</span><span style="font-size: 11pt">对象Q?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">bool validateStudent(Student s);</span><span style="font-size: 11pt">调用q个函数Q?u><span style="color: blue">额外的隐性开销包括要先调用</span></u></span><u><span style="font-size: 11pt; color: blue; font-family: 'Arial','sans-serif'">copy constructor</span></u><u><span style="font-size: 11pt; color: blue">创徏一?/span></u><u><span style="font-size: 11pt; color: blue; font-family: 'Arial','sans-serif'">Student</span></u><u><span style="font-size: 11pt; color: blue">对象用于函数内部Q函数执行结束再调用析构函数释放q个对象?/span></u></p> <h3><span style="font-family: 宋体">开销太大了,改进一下:(x)</span>pass by reference-to-const</h3> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">bool validateStudent(<strong>const</strong> Student<strong>&</strong> s);</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; color: red">引用是通过指针来实现实现的Q因此传递引用实际上是在传递指针?/span><span style="font-size: 11pt; color: red; font-family: 'Arial','sans-serif'">references are typically implemented as pointers.</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">但是q个规则对于内置数据cd不适用Q也不是适用</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">STL iterator</span><span style="font-size: 11pt">和函数对?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">function objects</span><span style="font-size: 11pt">?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">即再小的对象也应该不要使用g递,而是要?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">pass by reference-to-const</span><span style="font-size: 11pt">?/span></p> <h3><span style="font-family: 宋体">关于</span>slicing problem<span style="font-family: 宋体">的另一U描q?/span></h3> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">slicing problem</span><span style="font-size: 11pt">是在多态规则里面容易生的?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">看一个简单的基类、派生类的定?/span></p> <p style="margin-bottom: 0pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">class Window </span></em></p> <p style="margin-bottom: 0pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">{</span></em></p> <p style="margin-bottom: 0pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">public:</span></em></p> <p style="margin: 0cm 0cm 0pt 7.1pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">int height;</span></em></p> <p style="margin: 0cm 0cm 0pt 7.1pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">int width;</span></em></p> <p style="margin-bottom: 0pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">};</span></em></p> <p style="margin-bottom: 0pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">class TextWindow : public Window</span></em></p> <p style="margin-bottom: 0pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">{</span></em></p> <p style="margin-bottom: 0pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">public:</span></em></p> <p style="margin: 0cm 0cm 0pt 7.1pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">int cursorLocation;</span></em></p> <p style="margin-bottom: 0pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">};</span></em></p> <p style="margin-bottom: 0pt"><em><span style="font-size: 11pt; color: #0070c0">…</span></em></p> <p style="margin-bottom: 0pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">Window win;</span></em></p> <p style="margin-bottom: 0pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">TextWindow *tWinPtr;</span></em></p> <p style="margin-bottom: 0pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">tWinPtr = new TextWindow;</span></em></p> <p style="margin-bottom: 0pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">win = *tWinprt;</span></em></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">win</span><span style="font-size: 11pt">是一?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Window</span><span style="font-size: 11pt">对象Q?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">C++</span><span style="font-size: 11pt">规定Q给</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">win</span><span style="font-size: 11pt">分配的内存看见的大小Q由光态类型决定。就是说默认的拷贝函数导致信息会(x)出现丢失。这是</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">slicing problem</span><span style="font-size: 11pt">?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">试想一下这要是通过g递的方式传递参敎ͼ实参一</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">copy</span><span style="font-size: 11pt">已l丢׃息了?/span></p> <h2><span style="font-family: 新宋?>牢记</span></h2> <ul style="margin-top: 0cm" type="disc"> <li style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Prefer pass-by-reference-to-const over pass-by-value.</span><span style="font-size: 11pt">q样既有效,又可以避?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">slicing problem</span><span style="font-size: 11pt">?/span></li> <li style="margin-bottom: 0pt"><span style="font-size: 11pt">但是q个规则对于内置数据cdQ?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">STL iterator</span><span style="font-size: 11pt">和函数对?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">function objects</span><span style="font-size: 11pt">不适用。对于它们传递值就好了?/span></li> </ul> <h1>Item 21<span style="font-family: 宋体">Q?/span>Don't try to return a reference when you must return an object.<span style="font-family: 宋体">必须q回对象Ӟ别妄惌回其</span>reference </h1> <h2>heap and stack</h2> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">堆和栈这?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">2</span><span style="font-size: 11pt">个不同的概念Q哎哟,我一直以为是一个词?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">heap</span><span style="font-size: 11pt">Q堆</span></p> <ul style="margin-top: 0cm" type="disc"> <li style="margin-bottom: 0pt"><span style="font-size: 11pt">栈是pȝ提供的功能,特点是快速高效,~点是有限制Q数据不灉|Q?/span></li> <li style="margin-bottom: 0pt"><span style="font-size: 11pt">堆是函数库内部数据结构,不一定唯一?/span></li> <li style="margin-bottom: 0pt"><span style="font-size: 11pt">堆空间的分配L动态的Q虽然程序结束时所有的数据I间都会(x)被释攑֛pȝQ但是精的甌内存</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">/</span><span style="font-size: 11pt">释放内存匚w是良好程序的基本要素?/span></li> <li style="margin-bottom: 0pt"><span style="font-size: 11pt">使用</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">new</span><span style="font-size: 11pt">创徏的对象是?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">heap</span><span style="font-size: 11pt">上分配内存空间?/span></li> </ul> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">stack</span><span style="font-size: 11pt">Q栈</span></p> <ul style="margin-top: 0cm" type="disc"> <li style="margin-bottom: 0pt"><span style="font-size: 11pt">而堆是函数库提供的功能,特点是灵zL便,数据适应面广泛,但是效率有一定降低?/span></li> <li style="margin-bottom: 0pt"><span style="font-size: 11pt">栈是pȝ数据l构Q对于进E?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">/</span><span style="font-size: 11pt">U程是唯一的;不同堆分配的内存无法互相操作?/span></li> <li style="margin-bottom: 0pt"><span style="font-size: 11pt">栈空间分静态分配和动态分配两U。静态分配是~译器完成的Q比如自动变?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">(auto)</span><span style="font-size: 11pt">的分配。动态分配由</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">alloca</span><span style="font-size: 11pt">函数完成。栈的动态分配无需释放</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">(</span><span style="font-size: 11pt">是自动的</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">)</span><span style="font-size: 11pt">Q也没有释攑և数。ؓ(f)可移植的E序赯Q?u>栈的动态分配操作是不被鼓励的!</u></span></li> <li style="margin-bottom: 0pt"><span style="font-size: 11pt">定义的局部变量是?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">stack</span><span style="font-size: 11pt">上分配内存空间的?/span></li> </ul> <h2><span style="font-family: 新宋?>牢记</span></h2> <ul style="margin-top: 0cm" type="disc"> <li style="margin-bottom: 0pt"><span style="font-size: 11pt">单一句话是必须要返回对象?/span></li> </ul> <h1>Item22<span style="font-family: 宋体">Q?/span>Declare data members private.<span style="font-family: 宋体">成员变量声明ؓ(f)</span>private </h1> <h2>why data members shouldn’t be public?</h2> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">argument</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">(against) </span><span style="font-size: 11pt">争论Q意?/span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt">实参</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt">形参?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">parameters</span></p> <h2>protected data member is mot more encapsulated than public one.</h2> <h2><span style="font-family: 新宋?>牢记</span></h2> <ul style="margin-top: 0cm" type="disc"> <li style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">data member</span><span style="font-size: 11pt">一定要装?/span></li> <li style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">protected</span><span style="font-size: 11pt">不必</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">public</span><span style="font-size: 11pt">有更好的装?/span></li> </ul> <h1>Item 23<span style="font-family: 宋体">Q?/span>Prefer non-member non-friend functions to member functions.<span style="font-family: 宋体">宁以</span>non-member<span style="font-family: 宋体">?/span>non-friend<span style="font-family: 宋体">替换</span>member<span style="font-family: 宋体">函数</span></h1> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">q是一个典型的例子Q?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">class WebBrowser {</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">public:</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">…</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">void clearCache();</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">void clearHistory();</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">void removeCookies();</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">…</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">};</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">Z提供一个执行所有操作的函数Q所以就?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">WebBrowser</span><span style="font-size: 11pt">里面q加定义Q?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">void clearEverything();</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">哎,我一直就是这么写的,q自以ؓ(f)有很好的装Q?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">But</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">void clearBrowser(WebBrowser wb) </span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">{</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">wb.clearCache();</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">wb.clearHistory();</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">wb.removeCookies();</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">}</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">W一Q前者ƈ不比后者有很好的封?/span></p> <p style="margin: 0cm 0cm 0pt 21.3pt"><span style="font-size: 11pt">q就要解释一下什么叫?#8220;装”Q以及封装的判别标准?/span></p> <p style="margin: 0cm 0cm 0pt 21.3pt"><span style="font-size: 11pt">装的判别标准:(x)可以通过l计能够讉Kq个</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">data</span><span style="font-size: 11pt">的函数的数目来计,函数多Q这?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">data</span><span style="font-size: 11pt">装也就月不好,因此前一U写法的装没有后者好。这也可以用来解?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Item22</span><span style="font-size: 11pt">里面Qؓ(f)什么要求数据成员不能定义ؓ(f)</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">public</span><span style="font-size: 11pt">。另外增?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">clearEverything()</span><span style="font-size: 11pt">作ؓ(f)</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">member function</span><span style="font-size: 11pt">Q实际上是降低了装性。而后面的</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">non-member non-friend functions</span><span style="font-size: 11pt">的定义就没有改变</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">WebBrowser</span><span style="font-size: 11pt">的封装性?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">W二Q后者还能提供更加灵zȝ打包</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">package</span><span style="font-size: 11pt">Q增加扩展性?/span></p> <p style="margin: 0cm 0cm 0pt 21.3pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">put all convenience functions in multiple header files, but one namespace.</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">W三Q增加函数的可扩展性?/span></p> <p style="margin: 0cm 0cm 0pt 21.3pt"><span style="font-size: 11pt">你可以定义自q</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">convenience functions</span><span style="font-size: 11pt">Q写C?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">header file</span><span style="font-size: 11pt">里面Q放到同一?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">namespace</span><span style="font-size: 11pt">里面。这?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">member function</span><span style="font-size: 11pt">做不到的?/span></p> <h2><span style="font-family: 新宋?>牢记</span></h2> <ul style="margin-top: 0cm" type="disc"> <li style="margin-bottom: 0pt"><span style="font-size: 11pt">优先使用</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">non-member non-friend</span><span style="font-size: 11pt">函数来替?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">member</span><span style="font-size: 11pt">函数?/span></li> </ul> <h1>Item 24<span style="font-family: 宋体">Q?/span>Declare non-member functions when type conversions should apply to all parameters.<span style="font-family: 宋体">若所有参数皆需cd转换Q请为此采用</span>non-member<span style="font-family: 宋体">函数</span></h1> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">原因Q?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Parameters are eligible for implicit type conversion only if they are listed in the parameter list.</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">l论Q?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">make operator* a non-member function, thus allowing compilers to perform implicit type conversions on all arguments.</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">class Rational {</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">…</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">};</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">const Rational operatior*(const Rational& lhs, Rational& rhs) </span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">{</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">   return Rationan(lhs.numerator()*rhs.numerator(),</span></p> <p style="margin: 0cm 0cm 0pt 36pt; text-indent: 36pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">lhs.denominator()*rhs. denominator () );</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">}</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">一个误区:(x)</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">如果一个函敎ͼ和某个类相关Q而又不能定义?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">member</span><span style="font-size: 11pt">Q那么这个函数就一定要定义?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">friend</span><span style="font-size: 11pt">?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">上面q个例子p明这个说法ƈ不正。真q命,慎用</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">friend functions</span><span style="font-size: 11pt">?/span></p> <h1>Item 25<span style="font-family: 宋体">Q?/span>Consider support for a non-throwing swap.<span style="font-family: 宋体">考虑写出一个不抛异常的</span>swap<span style="font-family: 宋体">函数</span></h1> <ol style="margin-top: 0cm" type="1"> <li style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">default swap</span></li> </ol> <p style="margin: 0cm 0cm 0pt 35.45pt"><span style="font-size: 11pt">是?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">std</span><span style="font-size: 11pt">里面定义?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">swap</span></p> <ol style="margin-top: 0cm" type="1" start="2"> <li style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">member swap</span></li> <li style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">nonmember swap</span></li> <li style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">specializations of std::swap</span></li> </ol> <h2>member swap</h2> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Widget</span><span style="font-size: 11pt">Q?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">:</span><span style="font-size: 11pt">我们希望的是交换指针Q但</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">swap</span><span style="font-size: 11pt">实际做的是不?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">copy</span><span style="font-size: 11pt">?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">3</span><span style="font-size: 11pt">?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Widget</span><span style="font-size: 11pt">对象Q而且q?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">copy</span><span style="font-size: 11pt">?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">3</span><span style="font-size: 11pt">?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">WidgetImpl</span><span style="font-size: 11pt">对象。太费了!都低x代了?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">class Widget{</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">void swap(Widget& other)</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">{</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">using std::swap;</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">swap(pImpl, other.pImpl;);</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">}</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">…</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">};</span></p> <p style="margin-bottom: 0pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">template<> void swap<Widget>( Widget& a, Widget&b)</span></em></p> <p style="margin-bottom: 0pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">{</span></em></p> <p style="margin-bottom: 0pt"><strong><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">   a.wap(b);</span></em></strong></p> <p style="margin-bottom: 0pt"><em><span style="font-size: 11pt; color: #0070c0; font-family: 'Arial','sans-serif'">}</span></em></p> <h2>nonmember swap</h2> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">接下来要讨论的是如果</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">Widget</span><span style="font-size: 11pt">?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">WidgetImpl</span><span style="font-size: 11pt">不是c而是cL板会(x)怎么P</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">U束条gQ不能在</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">std</span><span style="font-size: 11pt">里面增加新的</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">template</span><span style="font-size: 11pt">Q只能特化(</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">specialize</span><span style="font-size: 11pt">Q?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">std</span><span style="font-size: 11pt">内的</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">template</span><span style="font-size: 11pt">?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">如果非要定义Q?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">say sorry</span><span style="font-size: 11pt">?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">behavior is undefined</span><span style="font-size: 11pt">?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">KAO</span><span style="font-size: 11pt">Q其实这比异常还讨厌?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">解决Ҏ(gu)是把它定义到一个自q</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">namespace</span><span style="font-size: 11pt">里面Q而不要定义到</span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">std</span><span style="font-size: 11pt">里面?/span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">namespace WidgetStuff {</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">…</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">template<typename T></span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">class Widget{…};</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">…</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">template<typename T></span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">void swap(Widget<T>& a, Widget<T>& b)</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">{</span></p> <p style="margin: 0cm 0cm 0pt 1cm"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">a.swap(b);</span></p> <p style="margin: 0cm 0cm 0pt 14.2pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">}</span></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">}</span></p> <h2>specializations of std::swap</h2> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">如果仅仅是针对一?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">class</span><span style="font-size: 11pt">Q那q?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">std::swap</span><span style="font-size: 11pt">?/span></p> <p style="margin-bottom: 0pt"><u><span style="font-size: 11pt; color: #c00000; font-family: 'Arial','sans-serif'">If you want to have your class-specializing version of swap called in as many contexts as possible, you need to write both a non-member version in the same namespace as your class and a specialization of std::swap.</span></u></p> <p style="margin-bottom: 0pt"><span style="font-size: 11pt">q部分十分绕Q?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">P111</span><span style="font-size: 11pt">q对?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">C++</span><span style="font-size: 11pt">?/span><span style="font-size: 11pt; font-family: 'Arial','sans-serif'">name lookup</span><span style="font-size: 11pt">的规则进行了详细的描q。值得重新温习(fn)?/span></p> <img src ="http://www.aygfsteel.com/amenglai/aggbug/316139.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/amenglai/" target="_blank">amenglai</a> 2010-03-22 11:28 <a href="http://www.aygfsteel.com/amenglai/articles/316139.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Effecitive C++MW记 W五?实现 Implementationshttp://www.aygfsteel.com/amenglai/articles/316135.htmlamenglaiamenglaiMon, 22 Mar 2010 03:19:00 GMThttp://www.aygfsteel.com/amenglai/articles/316135.htmlhttp://www.aygfsteel.com/amenglai/comments/316135.htmlhttp://www.aygfsteel.com/amenglai/articles/316135.html#Feedback0http://www.aygfsteel.com/amenglai/comments/commentRss/316135.htmlhttp://www.aygfsteel.com/amenglai/services/trackbacks/316135.html阅读全文

amenglai 2010-03-22 11:19 发表评论
]]>
վ֩ģ壺 ɽ| ף| ҽ| | | | | ij| | | | | ӱ| | ͩ| | ƽ| ԭƽ| ƶ| | ͬ| Ǩ| ͭϿ| Ͱ| | | | | | | | | | | | ±| | | | | ̳|