﻿<?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++博客-pengkuny-随笔分类-帅气的风格</title><link>http://www.cppblog.com/pengkuny/category/2929.html</link><description>&lt;P&gt;&lt;FONT style="FONT-SIZE: 10pt; FILTER: glow(color=black); WIDTH: 100%; COLOR: #e4dc9b; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;我爱常安!我喜欢梦之旅. 常安,拥有傲人的嗓音,声线成熟动人,她的声音高入云端而又翩跹再三,可以穿透您的心灵而回味无穷,让您的耳畔回旋着那种高亢空灵的感觉,她的音质干静、技巧纯熟,擅长诠释抒情歌曲,亦能将怀旧民歌表现的淋漓尽致.&lt;/FONT&gt;&lt;/P&gt;
</description><language>zh-cn</language><lastBuildDate>Mon, 19 May 2008 15:37:59 GMT</lastBuildDate><pubDate>Mon, 19 May 2008 15:37:59 GMT</pubDate><ttl>60</ttl><item><title>C++是否可以考虑增加智能指针</title><link>http://www.cppblog.com/pengkuny/archive/2006/12/22/16723.html</link><dc:creator>pengkuny</dc:creator><author>pengkuny</author><pubDate>Fri, 22 Dec 2006 04:49:00 GMT</pubDate><guid>http://www.cppblog.com/pengkuny/archive/2006/12/22/16723.html</guid><wfw:comment>http://www.cppblog.com/pengkuny/comments/16723.html</wfw:comment><comments>http://www.cppblog.com/pengkuny/archive/2006/12/22/16723.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/pengkuny/comments/commentRss/16723.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/pengkuny/services/trackbacks/16723.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 从链首找到链中间某个元素需要一直沿next指针寻找,<br>麻烦在于编程不方便.<br>&nbsp;&nbsp;<a href='http://www.cppblog.com/pengkuny/archive/2006/12/22/16723.html'>阅读全文</a><img src ="http://www.cppblog.com/pengkuny/aggbug/16723.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/pengkuny/" target="_blank">pengkuny</a> 2006-12-22 12:49 <a href="http://www.cppblog.com/pengkuny/archive/2006/12/22/16723.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>林锐《高质量编程指南》学习笔记</title><link>http://www.cppblog.com/pengkuny/archive/2006/11/24/15627.html</link><dc:creator>pengkuny</dc:creator><author>pengkuny</author><pubDate>Fri, 24 Nov 2006 08:43:00 GMT</pubDate><guid>http://www.cppblog.com/pengkuny/archive/2006/11/24/15627.html</guid><wfw:comment>http://www.cppblog.com/pengkuny/comments/15627.html</wfw:comment><comments>http://www.cppblog.com/pengkuny/archive/2006/11/24/15627.html#Feedback</comments><slash:comments>18</slash:comments><wfw:commentRss>http://www.cppblog.com/pengkuny/comments/commentRss/15627.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/pengkuny/services/trackbacks/15627.html</trackback:ping><description><![CDATA[<p>需要林锐《高质量编程指南》原文的请在回复中<strike>留下电子邮箱</strike>.请在迅雷中自行搜索.<br><br><strong><font size=5>11月14日</font></strong><br>1.头文件规范:<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">*-----------------------------------------------------------</span> <span style="COLOR: #000000"><br><img id=Codehighlighter1_63_596_Open_Image onclick="this.style.display='none'; Codehighlighter1_63_596_Open_Text.style.display='none'; Codehighlighter1_63_596_Closed_Image.style.display='inline'; Codehighlighter1_63_596_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top> <img id=Codehighlighter1_63_596_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_63_596_Closed_Text.style.display='none'; Codehighlighter1_63_596_Open_Image.style.display='inline'; Codehighlighter1_63_596_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top>&nbsp;&nbsp;</span> <span id=Codehighlighter1_63_596_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">/**/</span> <span id=Codehighlighter1_63_596_Open_Text><span style="COLOR: #008000">/*</span> <span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;RB-Tree的插入和删除操作的实现算法<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;1.版权声明:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;@&nbsp;2006,pengkuny(</span> <span style="COLOR: #008000; TEXT-DECORATION: underline">http://www.cppblog.com/pengkuny</span> <span style="COLOR: #008000">),All&nbsp;rights&nbsp;reserved.<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;您可以自由的传播，修改这份代码，转载处请注明原作者&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;2.文件名称:&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;3.参考资料:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;1)&nbsp;&lt;&lt;Introduction&nbsp;to&nbsp;algorithm&gt;&gt;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;2)&nbsp;</span> <span style="COLOR: #008000; TEXT-DECORATION: underline">http://www.ececs.uc.edu/</span> <span style="COLOR: #008000">~franco/C321/html/RedBlack/redblack.html<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;4.内容摘要:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;红黑树的几个性质:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;1)&nbsp;每个结点只有红和黑两种颜色<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;2)&nbsp;根结点是黑色的<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;3)&nbsp;每个叶子结点(空结点被认为是叶子结点)是黑色的<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;4)&nbsp;如果一个结点是红色的,那么它的左右两个子结点的颜色是黑色的<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;5)&nbsp;对于每个结点而言,从这个结点到叶子结点的任何路径上的黑色结点<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;的数目相同&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;5.完成日期:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;2006.11.14<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;&nbsp;-------------------------------------------------------------</span> <span style="COLOR: #008000">*/</span> </span><span style="COLOR: #000000">&nbsp;</span> </div>
<p>&nbsp;</p>
<p>2.【规则】一行代码只做一件事情，如只定义一个变量，或只写一条语句。这样的代码容易阅读，并且方便于写注释。如: </p>
<p>int width;&nbsp;// 宽度<br>int height;&nbsp;// 高度<br>int depth;&nbsp;// 深度<br>x = a + b;<br>y = c + d;<br>z = e + f;<br>if (width &lt; height) <br>{<br>dosomething();<br>}<br>for (initialization; condition; update)<br>{<br>dosomething();<br>}<br>// 空行<br>other(); </p>
<p>&nbsp;</p>
<p>3.【建议】尽可能在定义变量的同时初始化该变量（就近原则）<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: #0000ff">int</span> <span style="COLOR: #000000">&nbsp;width&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">10</span> <span style="COLOR: #000000">;&nbsp;&nbsp;</span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">&nbsp;定义并初绐化width&nbsp;</span> <span style="COLOR: #008000"><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;height&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">10</span> <span style="COLOR: #000000">;&nbsp;</span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">&nbsp;定义并初绐化height&nbsp;</span> <span style="COLOR: #008000"><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;depth&nbsp;</span> <span style="COLOR: #000000">=</span> <span style="COLOR: #000000">&nbsp;</span> <span style="COLOR: #000000">10</span> <span style="COLOR: #000000">;&nbsp;&nbsp;</span> <span style="COLOR: #008000">//</span> <span style="COLOR: #008000">&nbsp;定义并初绐化depth&nbsp;</span> </div>
<p>&nbsp;</p>
<p>4.空格写法:<br>&nbsp;【规则】if、for、while等关键字之后应留一个空格再跟左括号&#8216;（&#8217;，以突出关键字。 </p>
<p>&nbsp;【规则】函数名之后不要留空格，紧跟左括号&#8216;（&#8217;，以与关键字区别。 </p>
<p>&nbsp;【规则】&#8216;（&#8217;向后紧跟，&#8216;）&#8217;、&#8216;，&#8217;、&#8216;;&#8217;向前紧跟，紧跟处不留空格。 </p>
<p>&nbsp;【规则】&#8216;，&#8217;之后要留空格，如Function(x, y, z)。如果&#8216;;&#8217;不是一行的结束符号，其后要留空格，如for (initialization; condition; update)。 </p>
<p>&nbsp;【规则】赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符，如&#8220;=&#8221;、&#8220;+=&#8221; &#8220;&gt;=&#8221;、&#8220;&lt;=&#8221;、&#8220;+&#8221;、&#8220;*&#8221;、&#8220;%&#8221;、&#8220;&amp;&amp;&#8221;、&#8220;||&#8221;、&#8220;&lt;&lt;&#8221;,&#8220;^&#8221;等二元操作符的前后应当加空格。 </p>
<p>&nbsp;【规则】一元操作符如&#8220;!&#8221;、&#8220;~&#8221;、&#8220;++&#8221;、&#8220;--&#8221;、&#8220;&amp;&#8221;（地址运算符）等前后不加空格。 </p>
<p>&nbsp;</p>
<p>5.【建议】对于表达式比较长的for语句和if语句，为了紧凑起见可以适当地去掉一些空格，如for (i=0; i&lt;10; i++)和if ((a&lt;=b) &amp;&amp; (c&lt;=d)) </p>
<p>&nbsp;</p>
<p>6.长行拆分:<br>&nbsp;【规则】长表达式要在低优先级操作符处拆分成新行，操作符放在新行之首（以便突出操作符）。拆分出的新行要进行适当的缩进，使排版整齐，语句可读。 </p>
<p>&nbsp;</p>
<p>7.应当将修饰符 * 和 ＆ 紧靠变量名<br>例如：<br>char&nbsp; *name;<br>int&nbsp;&nbsp; *x, y;&nbsp;// 此处y不会被误解为指针 </p>
<p>&nbsp;</p>
<p>8.注释的写法:<br>&nbsp;&nbsp; 程序块的注释常采用&#8220;/*&#8230;*/&#8221;，行注释一般采用&#8220;//&#8230;&#8221;。 </p>
<p>&nbsp;【规则】注释是对代码的&#8220;提示&#8221;，而不是文档。程序中的注释不可喧宾夺主，注释太多了会让人眼花缭乱。注释的花样要少。 </p>
<p>&nbsp;【规则】边写代码边注释 </p>
<p>&nbsp;【规则】注释的位置应与被描述的代码相邻，可以放在代码的上方或右方，不可放在下方。 </p>
<p>&nbsp;</p>
<p>9.类的版式:<br>&nbsp;&nbsp; 我们不可以滥用类的封装功能，不要把它当成火锅，什么东西都往里扔。<br>&nbsp;&nbsp; 将public类型的函数写在前面，而将private类型的数据写在后面，&#8220;以行为为中心&#8221;，重点关注的是类应该提供什么样的接口（或服务）。 </p>
<p>&nbsp;</p>
<p>10.命名规则:<br>&nbsp;&nbsp; 切忌使用汉语拼音来命名。<br>&nbsp;【规则】命名规则尽量与所采用的操作系统或开发工具的风格保持一致。<br>&nbsp;&nbsp; 例如Windows应用程序的标识符通常采用&#8220;大小写&#8221;混排的方式，如AddChild。而Unix应用程序的标识符通常采用&#8220;小写加下划线&#8221;的方式，如add_child。别把这两类风格混在一起用。<br>&nbsp;【规则】变量的名字应当使用&#8220;名词&#8221;或者&#8220;形容词＋名词&#8221;。<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: #0000ff">float</span> <span style="COLOR: #000000">&nbsp;&nbsp;value;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span> <span style="COLOR: #0000ff">float</span> <span style="COLOR: #000000">&nbsp;&nbsp;oldValue;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span> <span style="COLOR: #0000ff">float</span> <span style="COLOR: #000000">&nbsp;&nbsp;newValue;&nbsp;</span> </div>
<p>&nbsp;【规则】全局函数的名字应当使用&#8220;动词&#8221;或者&#8220;动词＋名词&#8221;（动宾词组）。类的成员函数应当只使用&#8220;动词&#8221;，被省略掉的名词就是对象本身。<br>例如：<br>DrawBox();&nbsp;&nbsp;// 全局函数<br>box-&gt;Draw();&nbsp;&nbsp;// 类的成员函数 </p>
<p>&nbsp;【建议】尽量避免名字中出现数字编号，如Value1,Value2等，除非逻辑上的确需要编号。这是为了防止程序员偷懒，不肯为命名动脑筋而导致产生无意义的名字（因为用数字编号最省事）。 </p>
<p><br><br></p>
<strong><font size=5>11月24日</font> <br></strong>1.简单的Windows应用程序命名规则:<br>【规则】类名和函数名用大写字母开头的单词组合而成。<br>例如：<br>&nbsp;class Node;&nbsp;&nbsp;&nbsp;// 类名<br>&nbsp;void&nbsp; SetValue(int value);&nbsp;// 函数名
<p>【规则】变量和参数用小写字母开头的单词组合而成。<br>例如：<br>&nbsp;BOOL flag;<br>&nbsp;int&nbsp; drawMode; </p>
<p>【规则】常量全用大写的字母，用下划线分割单词。<br>例如：<br>&nbsp;const int MAX = 100;<br>&nbsp;const int MAX_LENGTH = 100; </p>
<p>【规则】静态变量加前缀s_（表示static）。<br>例如：<br>&nbsp;static int s_initValue;&nbsp;// 静态变量<br>【规则】全局变量加前缀g_（表示global）。 </p>
<p>【规则】类的数据成员加前缀m_（表示member），这样可以避免数据成员与成员函数的参数同名。 </p>
<p>&nbsp;</p>
<p>2.允许复合表达式存在的理由是：（1）书写简洁；（2）可以提高编译效率。但要防止滥用复合表达式。 </p>
<p>&nbsp;</p>
<p>3.布尔变量与零值比较:<br>【规则1】不可将布尔变量直接与TRUE、FALSE或者1、0进行比较。<br>&nbsp;&nbsp;&nbsp; 根据布尔类型的语义，零值为&#8220;假&#8221;（记为FALSE），任何非零值都是&#8220;真&#8221;（记为TRUE）。TRUE的值究竟是什么并没有统一的标准。例如Visual C++ 将TRUE定义为1，而Visual Basic则将TRUE定义为-1。<br>假设布尔变量名字为flag，它与零值比较的标准if语句如下：<br>if (flag)&nbsp;// 表示flag为真<br>if (!flag)&nbsp;// 表示flag为假<br>其它的用法都属于不良风格，例如：<br>&nbsp;if (flag == TRUE)&nbsp;<br>&nbsp;if (flag == 1 )&nbsp;&nbsp;<br>&nbsp;if (flag == FALSE)&nbsp; <br>&nbsp;if (flag == 0)&nbsp; </p>
<p>对于林锐提出的规则我有质疑,既然bool型的值按定义记为FALSE和TRUE,<br>那么我根本不关心FALSE和TRUE的具体值,那么<br>&nbsp;if (flag == TRUE)&nbsp;&nbsp;<br>又有何不可?系统总不会把TRUE定义为0吧?(如果是这样,林锐还是对的) </p>
<p>&nbsp;</p>
<p>4.整型变量与零值比较:<br>【规则】应当将整型变量用&#8220;==&#8221;或&#8220;！=&#8221;直接与0比较。<br>与零值比较的标准if语句如下：<br>if (value == 0)&nbsp; <br>if (value != 0)<br>不可模仿布尔变量的风格而写成<br>if (value)&nbsp;&nbsp;// 会让人误解 value是布尔变量<br>if (!value) </p>
<p>&nbsp;</p>
<p>5.浮点变量与零值比较:<br>if ((x&gt;=-EPSINON) &amp;&amp; (x&lt;=EPSINON)) </p>
<p>&nbsp;</p>
<p>6.指针变量与零值比较:<br>if (p == NULL)&nbsp;// p与NULL显式比较，强调p是指针变量<br>if (p != NULL)&nbsp; </p>
<p>&nbsp;</p>
<p>7.为防止出错:<br>为了防止将 if (p == NULL) 误写成 if (p = NULL)，而有意把p和NULL颠倒。<br>编译器认为 if (p = NULL) 是合法的，但是会指出 if (NULL = p)是错误的，<br>因为NULL不能被赋值。 </p>
<p>if (condition)&nbsp;//不良风格,容易出错<br>&nbsp;return x;<br>return y;<br>改写为<br>if (condition)<br>{<br>&nbsp;return x;<br>}<br>else<br>{<br>&nbsp;return y;<br>}<br>或者改写成更加简练的 <br>return (condition ? x : y); </p>
<p>&nbsp;</p>
<p>8.循环语句的效率:<br>【建议】在多重循环中，如果有可能，应当将最长的循环放在最内层，最短的循环放在最外层，以减少CPU跨切循环层的次数。<br>【建议】如果循环体内存在逻辑判断，并且循环次数很大，宜将逻辑判断移到循环体的外面。<br>如果老要进行逻辑判断，打断了循环&#8220;流水线&#8221;作业，使得编译器不能对循环进行优化处理，降低了效率。<br>但缺点是:程序不简洁. </p>
<p>&nbsp;</p>
<p>9.【建议】建议for语句的循环控制变量的取值采用&#8220;半开半闭区间&#8221;写法。<br>x值属于半开半闭区间&#8220;0 =&lt; x &lt; N&#8221;，起点到终点的间隔为N，循环次数为N。非常直观简洁. </p>
<p>&nbsp;</p>
<p>10.【规则】不要忘记最后那个default分支。即使程序真的不需要default处理，也应该保留语句<br>&nbsp;default : break; <br>这样做并非多此一举，而是为了防止别人误以为你忘了default处理。 </p>
<p>&nbsp;</p>
<p><br>11.goto的讨论:<br>很多人建议废除C++/C的goto语句，以绝后患。但实事求是地说，错误是程序员自己造成的，不是goto的过错。goto 语句至少有一处可显神通，它能从多重循环体中咻地一下子跳到外面，用不着写很多次的break语句; <br>就象楼房着火了，来不及从楼梯一级一级往下走，可从窗口跳出火坑。所以我们主张少用、慎用goto语句，而不是禁用。 </p>
<p>&nbsp;</p>
<p>12.常量的讨论:<br>C语言用 #define来定义常量（称为宏常量）。<br>C++ 语言除了 #define外还可以用const来定义常量（称为const常量）。 </p>
<p>在C++中,const定义常量的优势:<br>1)类型检查<br>2)可以调试<br>&nbsp;&nbsp;&nbsp; 故可以规定:<br>【规则】在C++ 程序中只使用const常量而不使用宏常量，即const常量完全取代宏常量。 </p>
<p>【规则】需要对外公开的常量放在头文件中，不需要对外公开的常量放在定义文件的头部(cpp文件)。<br>为便于管理，可以把不同模块的常量集中存放在一个公共的头文件中。 </p>
<p>类中使用const常量:<br>1)不能在类声明中初始化const数据成员。<br>&nbsp; 因为类的对象未被创建时，编译器不知道该成员的值是什么。<br>&nbsp; const数据成员的初始化只能在类构造函数的初始化表中进行.<br>2)const数据成员只在某个对象生存期内是常量，而对于整个类而言却是可变的，<br>&nbsp; 因为类可以创建多个对象，不同的对象其const数据成员的值可以不同。<br>3)怎样才能建立在整个类中都恒定的常量呢？<br>&nbsp; 别指望const数据成员了，应该用类中的枚举常量来实现。<br>&nbsp; 但是缺点很明显,只能表示有限大小的整型值. </p>
<p>&nbsp;</p>
<p>13.函数设计:<br>C语言中，函数的参数和返回值的传递方式有两种：<br>值传递（pass by value）和指针传递（pass by pointer）。<br>C++ 语言中多了引用传递（pass by reference）。 </p>
<p>&nbsp;</p>
<p><br>14.风格:<br>【规则】:<br>void SetValue(int width, int height);&nbsp;// 良好的风格<br>void SetValue(int, int);&nbsp;&nbsp;// 不良的风格<br>float GetValue(void);&nbsp;&nbsp;// 良好的风格<br>float GetValue();&nbsp;&nbsp;// 不良的风格 </p>
<p>【规则】参数命名要恰当，顺序要合理。<br>一般地，应将目的参数放在前面，源参数放在后面。<br>如果将函数声明为：<br>void StringCopy(char *strDestination, char *strSource); </p>
<p>【规则】如果参数是指针，且仅作输入用，则应在类型前加const，以防止该指针在函数体内被意外修改。<br>例如：<br>void StringCopy(char *strDestination，const char *strSource); </p>
<p>【规则】如果输入参数以值传递的方式传递对象，则宜改用&#8220;const &amp;&#8221;方式来传递，这样可以省去临时对象的构造和析构过程，从而提高效率。<br><strong>@#$%:const &amp; 怎么用?</strong></p>
<p>【规则】不要将正常值和错误标志混在一起返回。正常值用输出参数获得，而错误标志用return语句返回。<br>典型的getchar函数:<br>可由&nbsp;int getchar(void);&nbsp; //字符型值和终止值EOF一同返回,不良风格,但用起来方便<br>改为&nbsp;&nbsp;&nbsp; BOOL GetChar(char *c); </p>
<p>【建议】有时候函数原本不需要返回值，但为了增加灵活性如支持链式表达，可以附加返回值。<br>char *strcpy(char *strDest，const char *strSrc); </p>
<p>&#160;</p>
&nbsp;<img src ="http://www.cppblog.com/pengkuny/aggbug/15627.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/pengkuny/" target="_blank">pengkuny</a> 2006-11-24 16:43 <a href="http://www.cppblog.com/pengkuny/archive/2006/11/24/15627.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>清华梦的粉碎—写给清华大学的退学申请（王垠）</title><link>http://www.cppblog.com/pengkuny/archive/2006/11/06/14744.html</link><dc:creator>pengkuny</dc:creator><author>pengkuny</author><pubDate>Mon, 06 Nov 2006 10:58:00 GMT</pubDate><guid>http://www.cppblog.com/pengkuny/archive/2006/11/06/14744.html</guid><wfw:comment>http://www.cppblog.com/pengkuny/comments/14744.html</wfw:comment><comments>http://www.cppblog.com/pengkuny/archive/2006/11/06/14744.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/pengkuny/comments/commentRss/14744.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/pengkuny/services/trackbacks/14744.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 其实我不后悔进入川大，不后悔来到清华，珍惜一切的历史，因为没有它们，我也许就不是现在的我，有着自己想法的我。我也许就在安逸的生活中变得堕落。它们不完美甚至给我痛苦，但是我还是珍惜，珍惜这里的朋友，这里的一草一木。也许这就是爱。我会变得更好，我会挂念我的满目苍夷的祖国母亲。我会回来告诉你我学到的一切，我会给你和其他儿女真正的幸福，一定的！ &nbsp;&nbsp;<a href='http://www.cppblog.com/pengkuny/archive/2006/11/06/14744.html'>阅读全文</a><img src ="http://www.cppblog.com/pengkuny/aggbug/14744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/pengkuny/" target="_blank">pengkuny</a> 2006-11-06 18:58 <a href="http://www.cppblog.com/pengkuny/archive/2006/11/06/14744.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>编程的30个细节</title><link>http://www.cppblog.com/pengkuny/archive/2006/11/01/14518.html</link><dc:creator>pengkuny</dc:creator><author>pengkuny</author><pubDate>Wed, 01 Nov 2006 09:19:00 GMT</pubDate><guid>http://www.cppblog.com/pengkuny/archive/2006/11/01/14518.html</guid><wfw:comment>http://www.cppblog.com/pengkuny/comments/14518.html</wfw:comment><comments>http://www.cppblog.com/pengkuny/archive/2006/11/01/14518.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/pengkuny/comments/commentRss/14518.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/pengkuny/services/trackbacks/14518.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要:             01、版权和版本 <br>        02、缩进、空格、换行、空行、对齐 <br>        03、程序注释 <br>        04、函数的[in][out]参数 <br>        05、对系统调用的返回进行判断 <br>        06、if 语句对出错的处理 <br>        07、头文件中的#ifndef <br>……&nbsp;&nbsp;<a href='http://www.cppblog.com/pengkuny/archive/2006/11/01/14518.html'>阅读全文</a><img src ="http://www.cppblog.com/pengkuny/aggbug/14518.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/pengkuny/" target="_blank">pengkuny</a> 2006-11-01 17:19 <a href="http://www.cppblog.com/pengkuny/archive/2006/11/01/14518.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>