﻿<?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/jukevin/</link><description /><language>zh-cn</language><lastBuildDate>Tue, 07 Apr 2026 16:24:29 GMT</lastBuildDate><pubDate>Tue, 07 Apr 2026 16:24:29 GMT</pubDate><ttl>60</ttl><item><title>C++中const用法总结</title><link>http://www.cppblog.com/jukevin/archive/2008/12/27/70499.html</link><dc:creator>JuKevin</dc:creator><author>JuKevin</author><pubDate>Sat, 27 Dec 2008 04:07:00 GMT</pubDate><guid>http://www.cppblog.com/jukevin/archive/2008/12/27/70499.html</guid><wfw:comment>http://www.cppblog.com/jukevin/comments/70499.html</wfw:comment><comments>http://www.cppblog.com/jukevin/archive/2008/12/27/70499.html#Feedback</comments><slash:comments>16</slash:comments><wfw:commentRss>http://www.cppblog.com/jukevin/comments/commentRss/70499.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jukevin/services/trackbacks/70499.html</trackback:ping><description><![CDATA[<p><strong><font size=2>C++中const用法总结</font></strong></p>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman" color=#000000 size=2><strong>作者JuKevin</strong></font></span>
<p style="MARGIN: 6pt 0cm; LINE-HEIGHT: 12pt"><font color=#000000><font size=2><strong><span lang=EN-US style="FONT-SIZE: 10.5pt"><font face="Times New Roman">1. const</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">修饰普通变量和指针</span></strong><span lang=EN-US style="FONT-SIZE: 10.5pt"></span></font></font></p>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">const</font></span><span style="FONT-FAMILY: 宋体">修饰变量，一般有两种写法：</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font color=#000000><font face="Times New Roman"><font size=2>const TYPE value;</font></font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font color=#000000><font face="Times New Roman"><font size=2>TYPE const value;</font></font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span style="FONT-FAMILY: 宋体">这两种写法在本质上是一样的。</span><span style="FONT-FAMILY: 宋体">它的含义是：</span><span lang=EN-US><font face="Times New Roman">const</font></span><span style="FONT-FAMILY: 宋体">修饰的类型为</span><span lang=EN-US><font face="Times New Roman">TYPE</font></span><span style="FONT-FAMILY: 宋体">的变量</span><span lang=EN-US><font face="Times New Roman">value</font></span><span style="FONT-FAMILY: 宋体">是不可变的。</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span style="FONT-FAMILY: 宋体">对于一个非指针的类型</span><span lang=EN-US><font face="Times New Roman">TYPE</font></span><span style="FONT-FAMILY: 宋体">，无论怎么写，都是一个含义，即</span><span lang=EN-US><font face="Times New Roman">value</font></span><span style="FONT-FAMILY: 宋体">只不可变。</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span style="FONT-FAMILY: 宋体">例如：</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">const int nValue</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">；</span><span style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman"> <span lang=EN-US><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//nValue</span></font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">是</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">const</font></span></font>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 20.1pt; TEXT-ALIGN: left" align=left><font size=2><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">int const nValue</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">；</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman"><span>&nbsp;&nbsp;&nbsp; </span>// nValue</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">是</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">const</font></span></font>
<p style="MARGIN: 0cm 0cm 0pt"><font size=2><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">但是对于指针类型的</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">TYPE</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">，不同的写法会有不同情况，例如：</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"></span></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman"><font size=2>A. const char *pContent;</font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="LETTER-SPACING: 0.4pt"><font color=#000000><font face="Times New Roman"><font size=2>B. char * const pContent;</font></font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman"><font size=2>C. char const *pContent;</font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman"><font size=2>D. const char* const pContent;</font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: red; LETTER-SPACING: 0.4pt"><font face="Times New Roman" size=2>&nbsp;</font></span>
<p style="MARGIN: 0cm 0cm 0pt"><font size=2><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">对于前三种写法，我们可以换个方式，给其加上括号</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"></span></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman"><font size=2>A. const (char) *pContent;</font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="LETTER-SPACING: 0.4pt"><font color=#000000><font face="Times New Roman"><font size=2>B. (char*) const pContent;</font></font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman"><font size=2>C. (char) const *pContent;</font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><font size=2><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">这样就一目了然。根据对于</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">const</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">修饰非指针变量的规则，很明显，</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">A=C.</font></span></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman" size=2>&nbsp;</font></span>
<p style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">- </font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">对于</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">A,C, const</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">修饰的类型为</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">char</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">的变量</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">*pContent</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">为常量，因此，</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">pContent</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">的内容为常量不可变</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">.</font></span></font>
<p style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">- </font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">对于</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">B, </font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">其实还有一种写法：</span><span style="LETTER-SPACING: 0.4pt"><font color=#000000><font face="Times New Roman"> <span lang=EN-US>const (char*) pContent;</span></font></font></span></font>
<p style="MARGIN: 0cm 0cm 0pt"><font size=2><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">含义为：</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">const</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">修饰的类型为</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">char*</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">的变量</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">pContent</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">为常量，因此，</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">pContent</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">指针本身为常量不可变</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">.</font></span></font>
<p style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">- </font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">对于</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">D, </font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">其实是</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">A</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">和</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">B</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">的混合体，表示指针本身和指针内容两者皆为常量不可变</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"></span></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman" size=2>&nbsp;</font></span>
<p style="MARGIN: 0cm 0cm 0pt"><font size=2><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">总结</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">:</font></span></font>
<p style="MARGIN: 0cm 0cm 0pt 19.5pt; TEXT-INDENT: -19.5pt; tab-stops: list 19.5pt"><font size=2><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><span><font face="Times New Roman">(1)<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></font></span></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">指针本身是常量不可变</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"></span></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="LETTER-SPACING: 0.4pt"><font color=#000000><font face="Times New Roman"><font size=2>(char*) const pContent;</font></font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font face="Times New Roman"><font size=2><span lang=EN-US style="LETTER-SPACING: 0.4pt">const (char*) pContent;</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"></span></font></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman" size=2>&nbsp;</font></span>
<p style="MARGIN: 0cm 0cm 0pt 19.5pt; TEXT-INDENT: -19.5pt; tab-stops: list 19.5pt"><font size=2><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><span><font face="Times New Roman">(2)<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></font></span></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">指针所指向的内容是常量不可变</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"></span></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman"><font size=2>const (char) *pContent;</font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman"><font size=2>(char) const *pContent;</font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman" size=2>&nbsp;</font></span>
<p style="MARGIN: 0cm 0cm 0pt 19.5pt; TEXT-INDENT: -19.5pt; tab-stops: list 19.5pt"><font size=2><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><span><font face="Times New Roman">(3)<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></font></span></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">两者都不可变</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"></span></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman"><font size=2>const char* const pContent;</font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman" size=2>&nbsp;</font></span>
<p style="MARGIN: 0cm 0cm 0pt"><font size=2><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">还有其中区别方法：</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"></span></font>
<p style="MARGIN: 0cm 0cm 0pt"><font size=2><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">沿着</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">*</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">号划一条线，</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"></span></font>
<p style="MARGIN: 0cm 0cm 0pt"><font size=2><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">如果</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">const</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">位于</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">*</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">的左侧，则</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">const</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">就是用来修饰指针所指向的变量，即指针指向为常量；</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"></span></font>
<p style="MARGIN: 0cm 0cm 0pt"><font size=2><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">如果</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">const</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">位于</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">*</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">的右侧，</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">const</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">就是修饰指针本身，即指针本身是常量。</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"></span></font> <br>
<p style="MARGIN: 6pt 0cm; LINE-HEIGHT: 12pt"><font color=#000000><font size=2><strong><span lang=EN-US style="FONT-SIZE: 10.5pt"><font face="Times New Roman">2. const</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">修饰函数参数</span></strong><span lang=EN-US style="FONT-SIZE: 10.5pt"></span></font></font></p>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">const</font></span><span style="FONT-FAMILY: 宋体">修饰函数参数是它最广泛的一种用途，它表示函数体中不能修改参数的值</span><span lang=EN-US><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体">包括参数本身的值或者参数其中包含的值</span><span lang=EN-US><font face="Times New Roman">)</font></span><span style="FONT-FAMILY: 宋体">。它可以很好</span><span lang=EN-US></span></font></font> <br>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">void function(const int Var); //</font></span><span style="FONT-FAMILY: 宋体">传递过来的参数在函数内不可以改变</span><span lang=EN-US><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体">无意义，因为</span><span lang=EN-US><font face="Times New Roman">Var</font></span><span style="FONT-FAMILY: 宋体">本身就是形参</span><span lang=EN-US><font face="Times New Roman">)</font></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">void function(const char* Var); //</font></span><span style="FONT-FAMILY: 宋体">参数指针所指内容为常量不可变</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">void function(char* const Var); //</font></span><span style="FONT-FAMILY: 宋体">参数指针本身为常量不可变</span><span lang=EN-US><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体">也无意义，</span><span><font face="Times New Roman"> </font></span><span style="FONT-FAMILY: 宋体">因为</span><span lang=EN-US><font face="Times New Roman">char* Var</font></span><span style="FONT-FAMILY: 宋体">也是形参</span><span lang=EN-US><font face="Times New Roman">)</font></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman" color=#000000 size=2>&nbsp;</font></span>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span style="FONT-FAMILY: 宋体">参数为引用，为了增加效率同时防止修改。</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span style="FONT-FAMILY: 宋体">修饰引用参数时：</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">void function(const Class&amp; Var);//</font></span><span style="FONT-FAMILY: 宋体">引用参数在函数内不可以改变</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">void function(const TYPE&amp; Var); //</font></span><span style="FONT-FAMILY: 宋体">引用参数在函数内为常量不可变</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman" color=#000000 size=2>&nbsp;</font></span>
<p style="MARGIN: 6pt 0cm; LINE-HEIGHT: 12pt"><font color=#000000><font size=2><strong><span lang=EN-US style="FONT-SIZE: 10.5pt"><font face="Times New Roman">3. const </font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">修饰函数返回值</span></strong><span lang=EN-US style="FONT-SIZE: 10.5pt"></span></font></font></p>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">const</font></span><span style="FONT-FAMILY: 宋体">修饰函数返回值其实用的并不是很多，它的含义和</span><span lang=EN-US><font face="Times New Roman">const</font></span><span style="FONT-FAMILY: 宋体">修饰普通变量以及指针的含义基本相同。</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">(1) const int fun1() </font></span><span style="FONT-FAMILY: 宋体">这个其实无意义，因为参数返回本身就是赋值。</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font color=#000000><font face="Times New Roman"><font size=2>(2) const int * fun2() </font></font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span style="FONT-FAMILY: 宋体">调用时</span><span lang=EN-US><font face="Times New Roman"> const int *pValue = fun2();</font></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span style="FONT-FAMILY: 宋体">我们可以把</span><span lang=EN-US><font face="Times New Roman">fun2()</font></span><span style="FONT-FAMILY: 宋体">看作成一个变量，那么就是我们上面所说的</span><span lang=EN-US><font face="Times New Roman">1.(1)</font></span><span style="FONT-FAMILY: 宋体">的写法，即指针内容不可变。</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font color=#000000><font face="Times New Roman"><font size=2>(3) int* const fun3() </font></font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span style="FONT-FAMILY: 宋体">调用时</span><span lang=EN-US><font face="Times New Roman"> int * const pValue = fun2();</font></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span style="FONT-FAMILY: 宋体">我们可以把</span><span lang=EN-US><font face="Times New Roman">fun2()</font></span><span style="FONT-FAMILY: 宋体">看作成一个变量，那么就是我们上面所说的</span><span lang=EN-US><font face="Times New Roman">1.(2)</font></span><span style="FONT-FAMILY: 宋体">的写法，即指针本身不可变。</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 6pt 0cm; LINE-HEIGHT: 12pt"><font color=#000000><font size=2><strong><span lang=EN-US style="FONT-SIZE: 10.5pt"><font face="Times New Roman">4. const</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">修饰类对象</span><span lang=EN-US style="FONT-SIZE: 10.5pt"><font face="Times New Roman">/</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">对象指针</span><span lang=EN-US style="FONT-SIZE: 10.5pt"><font face="Times New Roman">/</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">对象引用</span></strong><span lang=EN-US style="FONT-SIZE: 10.5pt"></span></font></font></p>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">const</font></span><span style="FONT-FAMILY: 宋体">修饰类对象表示该对象为常量对象，其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">const</font></span><span style="FONT-FAMILY: 宋体">修饰的对象，该对象的任何非</span><span lang=EN-US><font face="Times New Roman">const</font></span><span style="FONT-FAMILY: 宋体">成员函数都不能被调用，因为任何非</span><span lang=EN-US><font face="Times New Roman">const</font></span><span style="FONT-FAMILY: 宋体">成员函数会有修改成员变量的企图。</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span style="FONT-FAMILY: 宋体">例如：</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font color=#000000><font face="Times New Roman"><font size=2>class AAA</font></font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font color=#000000><font face="Times New Roman"><font size=2>{<br><span>&nbsp;&nbsp; </span>void func1();</font></font></font></span>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 15.75pt"><span lang=EN-US><font color=#000000><font face="Times New Roman"><font size=2>void func2() const;</font></font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font color=#000000><font face="Times New Roman"><font size=2>}</font></font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font color=#000000><font face="Times New Roman"><font size=2>const AAA aObj;</font></font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">aObj.func1(); </font></span><span style="FONT-FAMILY: 宋体">&#215;</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">aObj.func2(); </font></span><span style="FONT-FAMILY: 宋体">正确</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman" color=#000000 size=2>&nbsp;</font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font color=#000000><font face="Times New Roman"><font size=2>const AAA* aObj = new AAA();</font></font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">aObj-&gt;func1(); </font></span><span style="FONT-FAMILY: 宋体">&#215;</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">aObj-&gt;func2(); </font></span><span style="FONT-FAMILY: 宋体">正确</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman" color=#000000 size=2>&nbsp;</font></span>
<p style="MARGIN: 6pt 0cm; LINE-HEIGHT: 12pt"><font color=#000000><font size=2><strong><span lang=EN-US style="FONT-SIZE: 10.5pt"><font face="Times New Roman">5. const</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">修饰成员变量</span></strong><span lang=EN-US style="FONT-SIZE: 10.5pt"></span></font></font></p>
<p style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体">const</span><span style="COLOR: black; FONT-FAMILY: 宋体">修饰类的成员函数，表示成员常量，不能被修改，同时它只能在初始化列表中赋值。<span lang=EN-US></span></span></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体"><font size=2>&nbsp;</font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体"><font size=2>class A</font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体"><font size=2>{</font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体"><font size=2><span>&nbsp;&nbsp; </span>&#8230;</font></span>
<p style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体"><span>&nbsp;&nbsp; </span>const int nValue;<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//</span><span style="COLOR: black; FONT-FAMILY: 宋体">成员常量不能被修改<span lang=EN-US></span></span></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体"><font size=2><span>&nbsp;&nbsp; </span>&#8230;</font></span>
<p style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体"><span>&nbsp;&nbsp; </span>A(int x): nValue(x) {}; //</span><span style="COLOR: black; FONT-FAMILY: 宋体">只能在初始化列表中赋值<span lang=EN-US></span></span></font>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 5.25pt"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体"><font size=2>}</font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-FAMILY: 宋体"><font color=#000000 size=2>&nbsp;</font></span>
<p style="MARGIN: 6pt 0cm; LINE-HEIGHT: 12pt"><font color=#000000><font size=2><strong><span lang=EN-US style="FONT-SIZE: 10.5pt"><font face="Times New Roman">6. const</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">修饰成员函数</span></strong><span lang=EN-US style="FONT-SIZE: 10.5pt"></span></font></font></p>
<p style="MARGIN: 0cm 0cm 0pt"><font size=2><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">const</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">修饰类的成员函数，则该成员函数不能修改类中任何非</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"><font face="Times New Roman">const</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.4pt">成员函数。一般写在函数的最后来修饰。</span><span lang=EN-US style="COLOR: black; LETTER-SPACING: 0.4pt"></span></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman" color=#000000 size=2>&nbsp;</font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体"><font size=2>class A</font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体"><font size=2>{</font></span>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: black; FONT-FAMILY: 宋体"><font size=2><span>&nbsp;&nbsp; </span>&#8230;</font></span>
<p style="MARGIN: 0cm 0cm 0pt 132.1pt; TEXT-INDENT: -115.5pt"><font color=#000000><font size=2><span lang=EN-US style="FONT-FAMILY: 宋体">void function()const; //</span><span style="FONT-FAMILY: 宋体">常成员函数<span lang=EN-US>, </span>它不改变对象的成员变量<span lang=EN-US>. </span>也不能调用类中任何非<span lang=EN-US>const</span>成员函数。<span lang=EN-US></span></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 5.25pt"><span lang=EN-US><font color=#000000><font face="Times New Roman"><font size=2>}</font></font></font></span>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span style="FONT-FAMILY: 宋体">对于</span><span lang=EN-US><font face="Times New Roman">const</font></span><span style="FONT-FAMILY: 宋体">类对象</span><span lang=EN-US><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体">指针</span><span lang=EN-US><font face="Times New Roman">/</font></span><span style="FONT-FAMILY: 宋体">引用，只能调用类的</span><span lang=EN-US><font face="Times New Roman">const</font></span><span style="FONT-FAMILY: 宋体">成员函数，因此，</span><span lang=EN-US><font face="Times New Roman">const</font></span><span style="FONT-FAMILY: 宋体">修饰成员函数的最重要作用就是限制对于</span><span lang=EN-US><font face="Times New Roman">const</font></span><span style="FONT-FAMILY: 宋体">对象的使用。</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><font face="Times New Roman" color=#000000 size=2>&nbsp;</font></span>
<p style="MARGIN: 6pt 0cm; LINE-HEIGHT: 12pt"><font color=#000000><font size=2><strong><span lang=EN-US style="FONT-SIZE: 10.5pt"><font face="Times New Roman">7. const</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">常量与</span><span lang=EN-US style="FONT-SIZE: 10.5pt"><font face="Times New Roman">define</font></span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">宏定义的区别</span></strong><span lang=EN-US style="FONT-SIZE: 10.5pt"></span></font></font></p>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">(1) </font></span><span style="FONT-FAMILY: 宋体">编译器处理方式不同</span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">define</font></span><span style="FONT-FAMILY: 宋体">宏是在预处理阶段展开。</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">const</font></span><span style="FONT-FAMILY: 宋体">常量是编译运行阶段使用。</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">(2) </font></span><span style="FONT-FAMILY: 宋体">类型和安全检查不同</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">define</font></span><span style="FONT-FAMILY: 宋体">宏没有类型，不做任何类型检查，仅仅是展开。</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">const</font></span><span style="FONT-FAMILY: 宋体">常量有具体的类型，在编译阶段会执行类型检查。</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">(3) </font></span><span style="FONT-FAMILY: 宋体">存储方式不同</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">define</font></span><span style="FONT-FAMILY: 宋体">宏仅仅是展开，有多少地方使用，就展开多少次，不会分配内存。</span><span lang=EN-US></span></font></font>
<p style="MARGIN: 0cm 0cm 0pt"><font color=#000000><font size=2><span lang=EN-US><font face="Times New Roman">const</font></span><span style="FONT-FAMILY: 宋体">常量会在内存中分配</span><span lang=EN-US><font face="Times New Roman">(</font></span><span style="FONT-FAMILY: 宋体">可以是堆中也可以是栈中</span><span lang=EN-US><font face="Times New Roman">)</font></span><span style="FONT-FAMILY: 宋体">。</span></font></font> </p>
<img src ="http://www.cppblog.com/jukevin/aggbug/70499.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jukevin/" target="_blank">JuKevin</a> 2008-12-27 12:07 <a href="http://www.cppblog.com/jukevin/archive/2008/12/27/70499.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最新注册了一个Blog, 以后和大家多多交流</title><link>http://www.cppblog.com/jukevin/archive/2008/12/27/70497.html</link><dc:creator>JuKevin</dc:creator><author>JuKevin</author><pubDate>Sat, 27 Dec 2008 03:20:00 GMT</pubDate><guid>http://www.cppblog.com/jukevin/archive/2008/12/27/70497.html</guid><wfw:comment>http://www.cppblog.com/jukevin/comments/70497.html</wfw:comment><comments>http://www.cppblog.com/jukevin/archive/2008/12/27/70497.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jukevin/comments/commentRss/70497.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jukevin/services/trackbacks/70497.html</trackback:ping><description><![CDATA[RT
<img src ="http://www.cppblog.com/jukevin/aggbug/70497.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jukevin/" target="_blank">JuKevin</a> 2008-12-27 11:20 <a href="http://www.cppblog.com/jukevin/archive/2008/12/27/70497.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>