<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mousefire Walking On The Earth &#187; 构造函数</title>
	<atom:link href="http://www.mousefire.net/tag/%e6%9e%84%e9%80%a0%e5%87%bd%e6%95%b0/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.mousefire.net</link>
	<description>点点滴滴</description>
	<lastBuildDate>Wed, 01 Sep 2010 11:45:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>C++Primer学习笔记2_构造函数初始化式</title>
		<link>http://www.mousefire.net/2009/12/25/cprimer%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b02_%e6%9e%84%e9%80%a0%e5%87%bd%e6%95%b0%e5%88%9d%e5%a7%8b%e5%8c%96%e5%bc%8f/</link>
		<comments>http://www.mousefire.net/2009/12/25/cprimer%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b02_%e6%9e%84%e9%80%a0%e5%87%bd%e6%95%b0%e5%88%9d%e5%a7%8b%e5%8c%96%e5%bc%8f/#comments</comments>
		<pubDate>Fri, 25 Dec 2009 11:30:13 +0000</pubDate>
		<dc:creator>mousefire</dc:creator>
				<category><![CDATA[C++Primer学习笔记]]></category>
		<category><![CDATA[构造函数]]></category>

		<guid isPermaLink="false">http://www.mousefire.net/2009/12/25/cprimer%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b02_%e6%9e%84%e9%80%a0%e5%87%bd%e6%95%b0%e5%88%9d%e5%a7%8b%e5%8c%96%e5%bc%8f/</guid>
		<description><![CDATA[　　正如Lippman所说，构造函数初始化列表是许多相当有经验的C++程序员都没有掌握的一个特性。虽然在学习MFC的时候，经常看到这种形式的初始化，但是总觉得格式不漂亮，也没有深究为什么Microsoft的程序员们喜欢这样做，直到今天。且看下面这两段代码： Sales_item(const std::string &#38;book=&#34;&#34;):isbn(book),units_sold(0),revenue(0.0){} Sales_item(const std::string &#38;book=&#34;&#34;) {     isbn=book;     units_sold=0;     revenue=0.0; } 　　第一段代码使用了初始化式，执行构造函数时，直接执行初始化，而第二段代码中，虽然没有显式的初始化式，但是在执行构造函数之前，要初始化isbn成员，由默认的string构造函数执行，在执行构造函数的函数体时，isbn成员已经有值了。这两个构造函数虽然执行结果相同，但是不使用初始化式等于在程序执行时多了一步。这种效率上的损失还不是最糟糕的，在以下情况下，甚至必须要使用初始化列表进行初始化： １．成员是没有默认构造函数的类 ２．成员是const对象 ３．成员是引用类型的对象 　　要注意的另外一点是：成员初始化的次序并不是它们出现在初始化列表中的次序，而是定义成员的次序．]]></description>
			<content:encoded><![CDATA[<p>　　正如Lippman所说，构造函数初始化列表是许多相当有经验的C++程序员都没有掌握的一个特性。虽然在学习MFC的时候，经常看到这种形式的初始化，但是总觉得格式不漂亮，也没有深究为什么Microsoft的程序员们喜欢这样做，直到今天。且看下面这两段代码：</p>
<div style="padding-bottom: 0px;margin: 0px;padding-left: 0px;padding-right: 0px;float: none;padding-top: 0px" class="wlWriterEditableSmartContent">
<div class="le-pavsc-container">
<div style="background: #fff;overflow: auto">
<ol style="background: #c2db8a;margin: 0;padding: 0 0 0 5px">
<li><span style="color:#010001">Sales_item</span><span style="color:#9b4e00">(</span><span style="color:#0000ff">const</span><span style="color:#9b4e00"> </span><span style="color:#010001">std</span><span style="color:#9b4e00">::</span><span style="color:#010001">string</span><span style="color:#9b4e00"> &amp;</span><span style="color:#010001">book</span><span style="color:#9b4e00">=</span><span style="color:#a31515">&quot;&quot;</span><span style="color:#9b4e00">):</span><span style="color:#010001">isbn</span><span style="color:#9b4e00">(</span><span style="color:#010001">book</span><span style="color:#9b4e00">),</span><span style="color:#010001">units_sold</span><span style="color:#9b4e00">(0),</span><span style="color:#010001">revenue</span><span style="color:#9b4e00">(0.0){}</span></li>
<li class="even"><span style="color:#9b4e00"></span></li>
<li><span style="color:#9b4e00"></span><span style="color:#010001">Sales_item</span><span style="color:#9b4e00">(</span><span style="color:#0000ff">const</span><span style="color:#9b4e00"> </span><span style="color:#010001">std</span><span style="color:#9b4e00">::</span><span style="color:#010001">string</span><span style="color:#9b4e00"> &amp;</span><span style="color:#010001">book</span><span style="color:#9b4e00">=</span><span style="color:#a31515">&quot;&quot;</span><span style="color:#9b4e00">)</span></li>
<li class="even"><span style="color:#9b4e00">{</span></li>
<li>    <span style="color:#9b4e00"></span><span style="color:#010001">isbn</span><span style="color:#9b4e00">=</span><span style="color:#010001">book</span><span style="color:#9b4e00">;</span></li>
<li class="even">    <span style="color:#9b4e00"></span><span style="color:#010001">units_sold</span><span style="color:#9b4e00">=0;</span></li>
<li>    <span style="color:#9b4e00"></span><span style="color:#010001">revenue</span><span style="color:#9b4e00">=0.0;</span></li>
<li class="even"><span style="color:#9b4e00">}</span></li>
</ol></div>
</p></div>
</p></div>
</p>
<p>　　第一段代码使用了初始化式，执行构造函数时，直接执行初始化，而第二段代码中，虽然没有显式的初始化式，但是在执行构造函数之前，要初始化isbn成员，由默认的string构造函数执行，在执行构造函数的函数体时，isbn成员已经有值了。这两个构造函数虽然执行结果相同，但是不使用初始化式等于在程序执行时多了一步。这种效率上的损失还不是最糟糕的，在以下情况下，甚至必须要使用初始化列表进行初始化：</p>
<p><font color="#804000"><strong>１．成员是没有默认构造函数的类</strong></font></p>
<p><font color="#804000"><strong>２．成员是const对象</strong></font></p>
<p><font color="#804000"><strong>３．成员是引用类型的对象</strong></font></p>
<p>　　要注意的另外一点是：成员初始化的次序并不是它们出现在初始化列表中的次序，而是定义成员的次序．</p>
]]></content:encoded>
			<wfw:commentRss>http://www.mousefire.net/2009/12/25/cprimer%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b02_%e6%9e%84%e9%80%a0%e5%87%bd%e6%95%b0%e5%88%9d%e5%a7%8b%e5%8c%96%e5%bc%8f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
