﻿<?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/diamondtiger/category/2104.html</link><description>斯是陋室，惟吾甚欣！</description><language>zh-cn</language><lastBuildDate>Tue, 27 May 2008 03:07:41 GMT</lastBuildDate><pubDate>Tue, 27 May 2008 03:07:41 GMT</pubDate><ttl>60</ttl><item><title>Const的应用点滴</title><link>http://www.cppblog.com/diamondtiger/archive/2006/07/04/9402.html</link><dc:creator>笨笨虎</dc:creator><author>笨笨虎</author><pubDate>Tue, 04 Jul 2006 15:40:00 GMT</pubDate><guid>http://www.cppblog.com/diamondtiger/archive/2006/07/04/9402.html</guid><wfw:comment>http://www.cppblog.com/diamondtiger/comments/9402.html</wfw:comment><comments>http://www.cppblog.com/diamondtiger/archive/2006/07/04/9402.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/diamondtiger/comments/commentRss/9402.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/diamondtiger/services/trackbacks/9402.html</trackback:ping><description><![CDATA[
		<p align="left">
				<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA">
						<font size="2">在<span lang="EN-US">c++</span>中，<span lang="EN-US">const</span>是一个不可或缺的非常有用的关键字，随处都可看见他的声影。可以从下面几个方面来看它的用法。 </font>
						<span lang="EN-US">
								<br />
						</span>
						<font size="2">一<span lang="EN-US">   </span>通常的用法： </font>
						<span lang="EN-US">
								<br />
								<font size="2">      </font>
						</span>
						<font size="2">通常的用法就是声明一个常量，在程序中不能被修改。声明时必须赋值。如：</font>
						<br />
						<br />
				</span>
		</p>
		<div align="left">
				<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: #0000ff">const</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> ival </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">10</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /> ival </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> ival </span>
						<span style="COLOR: #000000">+</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> 错误，不能被赋值。<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				</div>
		</div>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt" align="left">
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt"> </span>
				<font size="2">
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">二<span lang="EN-US">  const</span>与指针<span lang="EN-US"><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt" align="left">
				<font size="2">
						<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">
								<span style="mso-tab-count: 1">     </span>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">有两种方式把<span lang="EN-US">const</span>用于指针：<span lang="EN-US"><o:p></o:p></span></span>
				</font>
		</p>
		<p class="MsoListParagraph" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-char-indent-count: 0; mso-list: l0 level1 lfo1" align="left">
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">
						<span style="mso-list: Ignore">
								<font size="2"> 1 </font>
						</span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-family: 宋体; mso-bidi-font-size: 10.5pt; mso-font-kerning: 0pt">
						<font size="2">让指针指向一个常量对象。<br /></font>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">
						<font size="2">这种方式的主要意图是防止使用该指针来修改所指向的值。如下面的代码:</font>
						<br />
						<br />
				</span>
		</p>
		<div align="left">
				<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"> ival </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">10</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #0000ff">const</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> ip </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000">ival;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000">ip </span>
						<span style="COLOR: #000000">+=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">; </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> 错误</span>
						<span style="COLOR: #008000">
								<br />
								<img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #000000">ival </span>
						<span style="COLOR: #000000">+=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">1</span>
						<span style="COLOR: #000000">; </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">正确<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				</div>
		</div>
		<p class="MsoListParagraph" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0" align="left">
				<font size="2">
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">也就是说</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Calibri">*ip</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">是一个常量，当然就不能被修改。但</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Calibri">ival</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">没被</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Calibri">const</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">修饰，就可以被修改。这里的</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Calibri">ip</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">表示的是</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Calibri">ival</font>
						</span>
				</font>
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">
						<font size="2">在内存中的地址，也是可以修改的。<br /></font>
				</span>
		</p>
		<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
				<o:p>
				</o:p>
		</span>
		<p class="MsoListParagraph" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-char-indent-count: 0; mso-list: l0 level1 lfo1" align="left">
				<font size="3">
						<font size="2">
								<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-font-kerning: 1.0pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">    <font size="2">还有一个问题就是，不能把</font></span>
						</font>
						<font size="2">
								<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt">const</span>
								<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-font-kerning: 1.0pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">常量的地址赋值给常规指针。因为常规指针的值是可以被修改的，这样就会更改</span>
								<span lang="EN-US" style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt">const</span>
						</font>
						<span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA; mso-font-kerning: 1.0pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">
								<font size="3">
										<font size="2">常量的值，是编译器不允许的。<br />如下面</font>
										<br />
										<br />
								</font>
						</span>
				</font>
		</p>
		<div align="left">
				<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">const</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> ival </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">10</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> ip </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000">ival; </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000"> 错误<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				</div>
		</div>
		<p class="MsoListParagraph" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0" align="left">
				<font size="2">
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">但是，如果程序员非要这样用的话，也可用强制类型转换的</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Calibri">const_cast</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">。</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoListParagraph" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0" align="left">
				<font size="2">
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">将</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Calibri">const</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">常量的地址赋值给指向</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Calibri">const</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的指针，这是可行的。因为两个值都是不允许修改的。</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoListParagraph" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: 0cm; mso-char-indent-count: 0" align="left">
				<font size="2">
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">还有，一般不允许使用指向</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<font face="Calibri">const</font>
						</span>
						<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">的多级指针；不能把常量数组赋值给非常量指针，也就是说在函数中用非常量数组做参数时，不能把常量数组名赋值给它。</span>
						<span lang="EN-US" style="mso-bidi-font-size: 10.5pt">
								<o:p>
								</o:p>
						</span>
				</font>
		</p>
		<p class="MsoListParagraph" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-char-indent-count: 0; mso-list: l0 level1 lfo1" align="left">
				<span lang="EN-US" style="mso-bidi-font-family: Calibri; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: Calibri">
						<span style="mso-list: Ignore">
								<font size="2">
										<font face="Calibri">2．</font>
										<span style="FONT: 7pt 'Times New Roman'">  </span>
								</font>
						</span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: Calibri; mso-hansi-font-family: Calibri">
						<font size="2">将指针本身声明为常量。<br /></font>
				</span> <br /><span lang="EN-US" style="mso-bidi-font-size: 10.5pt"><o:p></o:p></span></p>
		<p class="MsoListParagraph" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-char-indent-count: 0; mso-list: l0 level1 lfo1" align="left">
		</p>
		<div align="left">
				<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"> ival </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">10</span>
						<span style="COLOR: #000000">;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #0000ff">int</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">*</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">const</span>
						<span style="COLOR: #000000"> ip </span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #000000">&amp;</span>
						<span style="COLOR: #000000">ival;<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />这里的意思是变量ival的地址是不可更改的。<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" />ip</span>
						<span style="COLOR: #000000">++</span>
						<span style="COLOR: #000000">; </span>
						<span style="COLOR: #008000">//</span>
						<span style="COLOR: #008000">错误<br /><img src="http://www.cppblog.com/images/OutliningIndicators/None.gif" align="top" /></span>
				</div>
		</div>
		<p class="MsoListParagraph" style="MARGIN: 0cm 0cm 0pt 39pt; TEXT-INDENT: -18pt; mso-char-indent-count: 0; mso-list: l0 level1 lfo1" align="left">
				<br />( 待续.........)</p>
<img src ="http://www.cppblog.com/diamondtiger/aggbug/9402.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/diamondtiger/" target="_blank">笨笨虎</a> 2006-07-04 23:40 <a href="http://www.cppblog.com/diamondtiger/archive/2006/07/04/9402.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>