﻿<?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++博客-我的最爱C++</title><link>http://www.cppblog.com/spnider/</link><description>C++我的最爱</description><language>zh-cn</language><lastBuildDate>Tue, 09 Jun 2026 20:06:27 GMT</lastBuildDate><pubDate>Tue, 09 Jun 2026 20:06:27 GMT</pubDate><ttl>60</ttl><item><title>基本数据类型使用注意事项</title><link>http://www.cppblog.com/spnider/archive/2006/07/25/10495.html</link><dc:creator>斯伯内德</dc:creator><author>斯伯内德</author><pubDate>Tue, 25 Jul 2006 08:23:00 GMT</pubDate><guid>http://www.cppblog.com/spnider/archive/2006/07/25/10495.html</guid><wfw:comment>http://www.cppblog.com/spnider/comments/10495.html</wfw:comment><comments>http://www.cppblog.com/spnider/archive/2006/07/25/10495.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/spnider/comments/commentRss/10495.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/spnider/services/trackbacks/10495.html</trackback:ping><description><![CDATA[
		<br />
		<span class="tpc_content">数值（文字常量），整数，浮点数，字符，字符串，布尔变量，枚举类型，数组这些基本数据类型的使用注意事项：<br /><br /><b>(一)数值</b><br />(1)避免使用"神秘数值".<br />神秘数值是程序中出现的，没有经过解释的数值文字常量，如100，122。<br />可以用定义常量和全局变量的方法来代替神秘数值。<br />例如： <br />#define MAX 100<br />const int MAX = 100;<br />(2)预防除零错误<br />在除法的时候要考虑表达式的分母是否有可能为0。<br /><br /><b>(二)整数</b><br />(1)检查整数除法<br />例如：<br />7/10他不等于0.7,而是0，或者等于负无穷大。<br />在现实世界里10*(7/10) = (10*7)/10 = 7，但在整数运算中却不同。10*(7/10) = 0。<br />(2)整数溢出<br />在做整数乘法和加法的时候容易出现这种情况。<br />避免整数溢出的最简单方法是考虑算术表达式中的每个项，设想每个项的最大值，预料出结果。<br />(3)中间结果溢出<br />例如：<br />int a = 1000000;<br />int b = 1000000;<br />int product = a * b / 1000000;<br />结果是product = -727;是不是跟预想的结果不一样。问题是出现在a * b这里，a * b的结果就已经大于了整数的最大取值范围。<br /><br /><b>(三)浮点数</b><br />(1)避免相差很大的两个浮点数相加减<br />例如：<br />1000000.00 + 0.1 可能等于的是1000000.00,因为32位不能给你足够的有效位数包容1000000和0.1之间的数值区间。<br />(2)避免等量判断<br />很多应该相等的浮点数值并不一定相等。<br />例如：<br /><br /><div class="quote" id="code1">C++代码<br />#include "stdafx.h"<br />#include &lt;iostream.h&gt;<br />int main(int argc, char* argv[])<br />{<br />    double nominal = 1.0;<br />    double sum = 0.0;<br />    <br />    for (int i = 0 ; i &lt; 10 ; i ++)<br />    {<br />        sum += 0.1;<br />    }<br /><br />    if (nominal == sum)<br />    {<br />        cout&lt;&lt;"same";<br />    }<br />    else<br />    {<br />        cout&lt;&lt;"different";<br />    }<br />    return 0;<br />}<br /></div>这段程序的结果是different。<br />(3)舍入误差问题<br />解决方案:<br />1.使用精确度更高的变量类型。<br />2.换用二进制编码的十进制变量。<br />3.把浮点变量变成整型变量。<br /><br /><b>(四)字符和字符串</b><br />(1)不要使用神秘字符和字符串。<br />(2)访问字符串时避免溢出。<br />(3)知道你的语言和开发环境如何支持Unicode.<br /><br /><b>(五)布尔变量</b><br />(1)用布尔变量对程序加以文档说明<br />例如：<br /><br />if ((elementIndex &lt; 0) || (MAX_ELEMENTS &lt; elementIndex) || (elementIndex == lastElementIndex))<br />{.....}<br /><br />这段代码布尔判断目的不明确，如果该成下面这样就比较明确了。<br /><br />bool finished = (elementIndex &lt; 0) || (MAX_ELEMENTS &lt; elementIndex);<br />bool repeatedEntry = (elementIndex == lastElementIndex);<br />if (finished || repeatedEntry ){....}<br /><br /><b>(六)枚举类型</b><br />(1)枚举可以提高可读性。<br />例如:<br /><br />if (color == 1)<br /><br />if (color == Color_red)<br /><br />相比之下第二条语句可读性就高。<br /><br />(2)枚举可以提高可靠性。<br />使用枚举使编译器执行很严格的类型检查。<br />例如：<br />    enum Color<br />    {<br />        Color_red,<br />        Color_blue,<br />        Color_black,<br />    };<br />声明了一个枚举类型Color,如果声明了一个Color类型的变量c，编译器只能允许Color_red,Color_blue,Color_black这3个值付给c。<br />(3)枚举可以简化修改。<br />就拿上边的Color来说吧，如果以后程序想添加一些颜色只需往列表中增加元素即可，编译以后就可以运行了。<br /><br /><b>(七)数组</b><br />(1)确认所有数组下标都没有超出数组的边界。<br />(2)如果数组是多维的，确认下标使用顺序的正确的。<br />(3)提防下标串换。<br />这种情况出现在使用嵌套循环的时候，不要把Array[i]写成Array[j]。<br /><br />以上是我看过资料自己整理出来的结果，如有不对希望大家指出来。如果不全请大家跟贴补充上来</span>
<img src ="http://www.cppblog.com/spnider/aggbug/10495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/spnider/" target="_blank">斯伯内德</a> 2006-07-25 16:23 <a href="http://www.cppblog.com/spnider/archive/2006/07/25/10495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>