﻿<?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++博客-franksunny的个人技术空间-随笔分类-C/C++实践</title><link>http://www.cppblog.com/franksunny/category/2850.html</link><description>获得人生中的成功需要的专注与坚持不懈多过天才与机会。

                       ——C.W. Wendte</description><language>zh-cn</language><lastBuildDate>Tue, 20 May 2008 01:57:31 GMT</lastBuildDate><pubDate>Tue, 20 May 2008 01:57:31 GMT</pubDate><ttl>60</ttl><item><title>第一次接到面试电话，汗颜一下</title><link>http://www.cppblog.com/franksunny/archive/2008/05/19/50424.html</link><dc:creator>frank.sunny</dc:creator><author>frank.sunny</author><pubDate>Mon, 19 May 2008 12:30:00 GMT</pubDate><guid>http://www.cppblog.com/franksunny/archive/2008/05/19/50424.html</guid><wfw:comment>http://www.cppblog.com/franksunny/comments/50424.html</wfw:comment><comments>http://www.cppblog.com/franksunny/archive/2008/05/19/50424.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/franksunny/comments/commentRss/50424.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/franksunny/services/trackbacks/50424.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">今天接到电话面试，被问到几个问题，汗颜之余，小结一下</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">1、<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">多态是如何实现绑定的</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">多态的绑定可以分为运行是多态和编译时多态</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">●</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编译时的多态性</span><span lang=EN-US><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编译时的多态性是通过重载来实现的。对于非虚的成员来说，系统在编译时，根据传递的参数、返回的类型等信息决定实现何种操作。</span><span lang=EN-US><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">●</span> <span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">运行时的多态性</span><span lang=EN-US><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">运行时的多态性就是指直到系统运行时，才根据实际情况决定实现何种操作。</span><span lang=EN-US>C#</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，运行时的多态性通过虚成员实现。</span><span lang=EN-US><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编译时的多态性为我们提供了运行速度快的特点，而运行时的多态性则带来了高度灵活和抽象的特点。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">今天才正式弄清楚原来虚函数是可以实现运行时多态的，以前只知道虚函数可以使得基类对象的的方法调用派生类的方法。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt"><span lang=EN-US style="mso-fareast-font-family: 'Times New Roman'"><span style="mso-list: Ignore">2、<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">析构函数是虚函数的优点是什么</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">用</span><span lang=EN-US>C++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发的时候，用来做基类的类的析构函数一般都是虚函数。可是，为什么要这样做呢？下面用一个小例子来说明：</span> <span lang=EN-US><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">有下面的两个类：</span><span lang=EN-US><o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US>class ClxBase<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US>{<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US>public:<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>ClxBase() {};<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>virtual ~ClxBase() {};<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>virtual void DoSomething() { cout &lt;&lt; "Do something in class ClxBase!" &lt;&lt; endl; };<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US>};<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US>class ClxDerived : public ClxBase<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US>{<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US>public:<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>ClxDerived() {};<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>~ClxDerived() { cout &lt;&lt; "Output from the destructor of class ClxDerived!" &lt;&lt; endl; }; <o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>void DoSomething() { cout &lt;&lt; "Do something in class ClxDerived!" &lt;&lt; endl; };<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US>};<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码</span><span lang=EN-US><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US>ClxBase *pTest = new ClxDerived;<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US>pTest-&gt;DoSomething();<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #e0e0e0; MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US>delete pTest;<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">输出结果是：</span><span lang=EN-US><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US>Do something in class ClxDerived!<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt 18pt"><span lang=EN-US>Output from the destructor of class ClxDerived!<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个很简单，非常好理解。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">但是，如果把类</span><span lang=EN-US>ClxBase</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">析构函数前的</span><span lang=EN-US>virtual</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">去掉，那输出结果就是下面的样子了：</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>Do something in class ClxDerived!</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也就是说，类</span><span lang=EN-US>ClxDerived</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的析构函数根本没有被调用！一般情况下类的析构函数里面都是释放内存资源，而析构函数不被调用的话就会造成内存泄漏。我想所有的</span><span lang=EN-US>C++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序员都知道这样的危险性。当然，如果在析构函数中做了其他工作的话，那你的所有努力也都是白费力气。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">所以，文章开头的那个问题的答案就是－－这样做是为了当用一个基类的指针删除一个派生类的对象时，派生类的析构函数会被调用。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当然，并不是要把所有类的析构函数都写成虚函数。因为当类里面有虚函数的时候，编译器会给类添加一个虚函数表，里面来存放虚函数指针，这样就会增加类的存储空间。所以，只有当一个类被用来作为基类的时候，才把析构函数写成虚函数。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">说实话，这个也是今天才深刻认识到的。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当然还问到很多数据结构和算法方面（空间复杂度和时间复杂度之类的东东，说真的也是基础性的）的问题，至于那些东西，自己说实话抛开没用他们已经很长时间了，真可以说忘的差不多了，考这种真的很怕，也怪平时没怎么用到。不知道大家用的多不？</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">好久没有正式参加过面试了，今天突然来一次觉得自己基础还是不够扎实。</span></p>
<img src ="http://www.cppblog.com/franksunny/aggbug/50424.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/franksunny/" target="_blank">frank.sunny</a> 2008-05-19 20:30 <a href="http://www.cppblog.com/franksunny/archive/2008/05/19/50424.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C中如何调用C++函数</title><link>http://www.cppblog.com/franksunny/archive/2007/11/29/37510.html</link><dc:creator>frank.sunny</dc:creator><author>frank.sunny</author><pubDate>Thu, 29 Nov 2007 12:38:00 GMT</pubDate><guid>http://www.cppblog.com/franksunny/archive/2007/11/29/37510.html</guid><wfw:comment>http://www.cppblog.com/franksunny/comments/37510.html</wfw:comment><comments>http://www.cppblog.com/franksunny/archive/2007/11/29/37510.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.cppblog.com/franksunny/comments/commentRss/37510.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/franksunny/services/trackbacks/37510.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center><span lang=EN-US>C</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中如何调用</span><span lang=EN-US>C++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数</span><span lang=EN-US>?</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">前阵子被问及一个在</span><span lang=EN-US>C</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中如何调用</span><span lang=EN-US>C++</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数的问题</span><span style="FONT-FAMILY: 宋体; mso-bidi-font-size: 10.5pt">，当时简单回答是<span style="COLOR: black">将函数</span>用<span lang=EN-US style="COLOR: black">extern "C"</span><span style="COLOR: black">声明，当被问及如何将类内成员函数声明时，一时语塞，后来网上查了下，网上有一翻译<span lang=EN-US>C++</span>之父的文章可以作为解答，遂拿来<span lang=EN-US>Mark</span>一下。<span lang=EN-US><o:p></o:p></span></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">将</span><span lang=EN-US> C++ </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数声明为</span><span lang=EN-US>``extern "C"''</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">（在你的</span><span lang=EN-US> C++ </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码里做这个声明），然后调用它（在你的</span><span lang=EN-US> C </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或者</span><span lang=EN-US> C++ </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码里调用）。例如：</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>// C++ code:</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>extern "C" void f(int); </span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>void f(int i)</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>{</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>// ...</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>} </span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后，你可以这样使用</span><span lang=EN-US> f()</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span><span lang=EN-US> </span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=DE style="mso-ansi-language: DE">/* C code: */<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>void f(int); </span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>void cc(int i)</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>{</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </span>f(i);</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 26.25pt; mso-char-indent-count: 2.5"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>/* ... */</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp;</span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>}</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当然，这招只适用于非成员函数。如果你想要在</span><span lang=EN-US> C </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里调用成员函数（包括虚函数），则需要提供一个简单的包装（</span><span lang=EN-US>wrapper</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）。例如：</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>// C++ code:</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>class C</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>{</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// ...</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>virtual double f(int);</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>}; </span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>extern "C" double call_C_f(C* p, int i) // wrapper function</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>{</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>return p-&gt;f(i);</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>}</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后，你就可以这样调用</span><span lang=EN-US> C::f()</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span><span lang=EN-US> </span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>/* C code: */</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>double call_C_f(struct C* p, int i); </span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>void ccc(struct C* p, int i)</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>{</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>double d = call_C_f(p,i);</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>/* ... */</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>} </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果你想在</span><span lang=EN-US> C </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里调用重载函数，则必须提供不同名字的包装，这样才能被</span><span lang=EN-US> C </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">代码调用。例如</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-ansi-language: DE">：</span><span lang=DE style="mso-ansi-language: DE"><o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=DE style="mso-ansi-language: DE">// C++ code:<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=DE style="mso-ansi-language: DE">void f(int);<o:p></o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>void f(double); </span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>extern "C" void f_i(int i) { f(i); }</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>extern "C" void f_d(double d) { f(d); } </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后，你可以这样使用每个重载的</span><span lang=EN-US> f()</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">：</span><span lang=EN-US> </span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>/* C code: */</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>void f_i(int);</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>void f_d(double); </span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>void cccc(int i,double d)</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>{</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>f_i(i);</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>f_d(d);</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>/* ... */</span></p>
<p class=MsoNormal style="BACKGROUND: #d9d9d9; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span lang=EN-US>} </span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">注意，这些技巧也适用于在</span><span lang=EN-US> C </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里调用</span><span lang=EN-US> C++ </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类库，即使你不能（或者不想）修改</span><span lang=EN-US> C++ </span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">头文件。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">该翻译的文档</span><span lang=EN-US>Bjarne Stroustrup</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的原文链接地址是</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><a href="http://www.research.att.com/~bs/bs_faq2.html#callCpp"><u><font color=#800080>http://www.research.att.com/~bs/bs_faq2.html#callCpp</font></u></a><br><br></span>本来贴出来以后受到很多C/C++朋友的关注，非常荣幸，在&#8220;梦在天涯&#8221;的提醒下，本人后来又完成了一个Demo工程，发现和BJ说的有点出入，希望有高手指点，Demo工程下载链接如下：</o:p></span><a href="http://www.cppblog.com/Files/franksunny/cCallCppDemo.rar">http://www.cppblog.com/Files/franksunny/cCallCppDemo.rar</a><br><br></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><a href="http://www.research.att.com/~bs/bs_faq2.html#callCpp"><u><font color=#800080></font></u></a></span>&nbsp;</p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<img src ="http://www.cppblog.com/franksunny/aggbug/37510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/franksunny/" target="_blank">frank.sunny</a> 2007-11-29 20:38 <a href="http://www.cppblog.com/franksunny/archive/2007/11/29/37510.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>无符号变量居然也能输出-1</title><link>http://www.cppblog.com/franksunny/archive/2007/10/17/34495.html</link><dc:creator>frank.sunny</dc:creator><author>frank.sunny</author><pubDate>Wed, 17 Oct 2007 14:46:00 GMT</pubDate><guid>http://www.cppblog.com/franksunny/archive/2007/10/17/34495.html</guid><wfw:comment>http://www.cppblog.com/franksunny/comments/34495.html</wfw:comment><comments>http://www.cppblog.com/franksunny/archive/2007/10/17/34495.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.cppblog.com/franksunny/comments/commentRss/34495.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/franksunny/services/trackbacks/34495.html</trackback:ping><description><![CDATA[<p>今天一个很偶然的机会，需要回答一个将无符号数据存到有符号变量的问题。我编码如下，结果很有意思，我是在VC6里调试的，有高人看到可否帮忙指点下。<br>int main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned short temp1 = 65535;<br>&nbsp;&nbsp;&nbsp;&nbsp;short temp2 = temp1;<br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned short temp3 = (unsigned short)temp2;<br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned short temp4 = temp2;<br>&nbsp;&nbsp;&nbsp;&nbsp;int temp5 = temp2;<br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned int temp6 = temp2;<br>&nbsp;&nbsp;&nbsp;&nbsp;unsigned long temp7 = temp2;<br>&nbsp;&nbsp;&nbsp;&nbsp;int temp8 = (unsigned short)temp2;<br>&nbsp;&nbsp;&nbsp;&nbsp;short temp9 = temp2;<br>&nbsp;&nbsp;&nbsp;&nbsp;printf("temp1 = %d\n temp2 = %d\n temp3 = %d\n temp4 = %d\n temp5 = %d\n temp6 = %d\n temp7 = %d\n temp8 = %d\n temp9 = %d\n",<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp1,temp2,temp3,temp4, temp5,temp6,temp7,temp8,temp9);<br>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br>}<br>//改程序的输出结果<br>//temp1 = 65535<br>//temp2 = -1<br>//temp3 = 65535<br>//temp4 = 65535<br>//temp5 = -1<br>//temp6 = -1<br>//temp7 = -1<br>//temp8 = 65535<br>//temp9 = -1;</p>
<p><br>//根据结果也就是说，无符号符号数据是可以存储在有符号型变量内存中的,<br>//而且有例子在内存块长度一样时，不用强转，直接赋给无符号变量时也可行<br>//上述事实可以解释为内存块不变，采用不同的解码方式解出不同的数据<br>//但是读出来的时候要注意，如果有符号转无符号一定要强转<br>//之所以上例unsigned int输出-1，我并不是很清楚</p>
<img src ="http://www.cppblog.com/franksunny/aggbug/34495.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/franksunny/" target="_blank">frank.sunny</a> 2007-10-17 22:46 <a href="http://www.cppblog.com/franksunny/archive/2007/10/17/34495.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++的static关键字(转载)</title><link>http://www.cppblog.com/franksunny/archive/2007/10/16/34373.html</link><dc:creator>frank.sunny</dc:creator><author>frank.sunny</author><pubDate>Tue, 16 Oct 2007 13:03:00 GMT</pubDate><guid>http://www.cppblog.com/franksunny/archive/2007/10/16/34373.html</guid><wfw:comment>http://www.cppblog.com/franksunny/comments/34373.html</wfw:comment><comments>http://www.cppblog.com/franksunny/archive/2007/10/16/34373.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/franksunny/comments/commentRss/34373.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/franksunny/services/trackbacks/34373.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 昨天遇到类内静态函数，本想自己整理下，谁知道已经有人整理的很好了，为此就不麻烦了，看了一篇就转贴在自己空间里，以便以后查询。C++的static关键字作者：韩耀旭C++的static有两种用法：面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数，不涉及类；后者主要说明static在类中的作用。一、面向过程设计中的static1、静态全局变量...&nbsp;&nbsp;<a href='http://www.cppblog.com/franksunny/archive/2007/10/16/34373.html'>阅读全文</a><img src ="http://www.cppblog.com/franksunny/aggbug/34373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/franksunny/" target="_blank">frank.sunny</a> 2007-10-16 21:03 <a href="http://www.cppblog.com/franksunny/archive/2007/10/16/34373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual Assist X AutoText修改</title><link>http://www.cppblog.com/franksunny/archive/2007/09/14/32223.html</link><dc:creator>frank.sunny</dc:creator><author>frank.sunny</author><pubDate>Fri, 14 Sep 2007 09:27:00 GMT</pubDate><guid>http://www.cppblog.com/franksunny/archive/2007/09/14/32223.html</guid><wfw:comment>http://www.cppblog.com/franksunny/comments/32223.html</wfw:comment><comments>http://www.cppblog.com/franksunny/archive/2007/09/14/32223.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/franksunny/comments/commentRss/32223.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/franksunny/services/trackbacks/32223.html</trackback:ping><description><![CDATA[<br>自从开始用VC以后，一直以来都在用Visual Assist，感觉这个工具真的非常好，但是有些自动文档功能就个人觉得并非很适合，不过可能由于自身的E文比较差吧，从来没想过自己如何去修改这个东西。来新单位已经两个礼拜了，马上又要下班了，就冲着这个查了下如何修改AutoText，终于发现了官网上的详细说明，现在粘帖在下面，以备不时之需 <a href="http://www.wholetomato.com/products/features/autotext.asp">http://www.wholetomato.com/products/features/autotext.asp</a><br><br>为了查找方便，自己也将常用的命令粘帖过来<br>
<h4>Code</h4>
Type your expanded code into the Code field. Include reserved strings to expand the date, filename and more. <br><br>
<table class=text cellPadding=4 summary="Special Strings" border=0>
    <tbody>
        <tr align=middle>
            <td></td>
            <td bgColor=#c9e5bf><strong>Reserved String</strong></td>
            <td bgColor=#c9e5bf><strong>Meaning</strong></td>
        </tr>
        <tr align=middle>
            <td bgColor=#dddddd><strong>Date</strong></td>
            <td bgColor=#eeeeee>$DATE$</td>
            <td bgColor=#eeeeee>Year/month/day formatted as %04d/%02d/%02d</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$DAY$</td>
            <td bgColor=#eeeeee>Day of month formatted as %d</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$DAY_02$</td>
            <td bgColor=#eeeeee>Day of month formatted as %02d</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$DAYNAME$</td>
            <td bgColor=#eeeeee>Three-character abbreviation of day</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$DAYLONGNAME$</td>
            <td bgColor=#eeeeee>Full name of day</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$MONTH$</td>
            <td bgColor=#eeeeee>Month formatted as %d</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$MONTH_02$</td>
            <td bgColor=#eeeeee>Month formatted as %02d</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$MONTHNAME$</td>
            <td bgColor=#eeeeee>Three-character abbreviation of month</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$MONTHLONGNAME$</td>
            <td bgColor=#eeeeee>Full name of month</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$YEAR$</td>
            <td bgColor=#eeeeee>Year formatted as %d</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$YEAR_02$</td>
            <td bgColor=#eeeeee>Year formatted as %02d</td>
        </tr>
        <tr align=middle>
            <td bgColor=#dddddd><strong>File</strong></td>
            <td bgColor=#eeeeee>$FILE$</td>
            <td bgColor=#eeeeee>Full filename with path*</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$FILE_UPPER$</td>
            <td bgColor=#eeeeee>Full filename with path in uppercase*</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$FILE_BASE$</td>
            <td bgColor=#eeeeee>Filename without path or extension*</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$FILE_BASE_UPPER$</td>
            <td bgColor=#eeeeee>Filename without path or extension in upper case*</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$FILE_EXT$</td>
            <td bgColor=#eeeeee>Filename extension*</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$FILE_EXT_UPPER$</td>
            <td bgColor=#eeeeee>Filename extension in upper case*</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$FILE_PATH$</td>
            <td bgColor=#eeeeee>Path of file*</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$FILE_PATH_UPPER$</td>
            <td bgColor=#eeeeee>Path of file in upper case*</td>
        </tr>
        <tr align=middle>
            <td bgColor=#dddddd><strong>General</strong></td>
            <td bgColor=#eeeeee>$clipboard$</td>
            <td bgColor=#eeeeee>Current clipboard</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$end$</td>
            <td bgColor=#eeeeee>Position of caret after expansion</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$selected$</td>
            <td bgColor=#eeeeee>Current selection**</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$$</td>
            <td bgColor=#eeeeee>$</td>
        </tr>
        <tr align=middle>
            <td bgColor=#dddddd><strong>GUID</strong></td>
            <td bgColor=#eeeeee>$GUID_DEFINITION$</td>
            <td bgColor=#eeeeee>Generated GUID formatted for use in a definition</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$GUID_STRING$</td>
            <td bgColor=#eeeeee>Generated GUID formatted for use in a string</td>
        </tr>
        <tr align=middle>
            <td bgColor=#ffffff></td>
            <td bgColor=#eeeeee>$GUID_STRUCT$</td>
            <td bgColor=#eeeeee>Generated GUID formatted for use in a struct</td>
        </tr>
        <tr align=middle>
            <td></td>
            <td bgColor=#ffffff colSpan=2>(Note that all instances of GUID reserved words will use a singe generated GUID.)</td>
            <br>
            <tr align=middle>
                <td bgColor=#dddddd><strong>Refactor</strong></td>
                <td bgColor=#eeeeee>$GeneratedPropertyName$</td>
                <td bgColor=#eeeeee>Property name generated during Encapsulate Field</td>
            </tr>
            <tr align=middle>
                <td bgColor=#ffffff></td>
                <td bgColor=#eeeeee>$MethodArg$</td>
                <td bgColor=#eeeeee>One parameter of the method and its type</td>
            </tr>
            <tr align=middle>
                <td bgColor=#ffffff></td>
                <td bgColor=#eeeeee>$MethodArgName$</td>
                <td bgColor=#eeeeee>One parameter of the method</td>
            </tr>
            <tr align=middle>
                <td bgColor=#ffffff></td>
                <td bgColor=#eeeeee>$MethodArgType$</td>
                <td bgColor=#eeeeee>Type of one parameter of the method</td>
            </tr>
            <tr align=middle>
                <td bgColor=#ffffff></td>
                <td bgColor=#eeeeee>$MethodBody$</td>
                <td bgColor=#eeeeee>Body of implementation</td>
            </tr>
            <tr align=middle>
                <td bgColor=#ffffff></td>
                <td bgColor=#eeeeee>$MethodQualifier$
                <td bgColor=#eeeeee>Optional qualifiers of method</td>
            </tr>
            <tr align=middle>
                <td bgColor=#ffffff></td>
                <td bgColor=#eeeeee>$ParameterList$</td>
                <td bgColor=#eeeeee>Parameters separated by commas</td>
            </tr>
            <tr align=middle>
                <td bgColor=#ffffff></td>
                <td bgColor=#eeeeee>$SymbolContext$</td>
                <td bgColor=#eeeeee>Context and name of method</td>
            </tr>
            <tr align=middle>
                <td bgColor=#ffffff></td>
                <td bgColor=#eeeeee>$SymbolName$</td>
                <td bgColor=#eeeeee>Name of method</td>
            </tr>
            <tr align=middle>
                <td bgColor=#ffffff></td>
                <td bgColor=#eeeeee>$SymbolPrivileges$</td>
                <td bgColor=#eeeeee>Access of method</td>
            </tr>
            <tr align=middle>
                <td bgColor=#ffffff></td>
                <td bgColor=#eeeeee>$SymbolStatic$</td>
                <td bgColor=#eeeeee>Keyword static or blank</td>
            </tr>
            <tr align=middle>
                <td bgColor=#ffffff></td>
                <td bgColor=#eeeeee>$SymbolType$</td>
                <td bgColor=#eeeeee>Return type of method</td>
            </tr>
            <tr align=middle>
                <td bgColor=#ffffff></td>
                <td bgColor=#eeeeee>$SymbolVirtual$</td>
                <td bgColor=#eeeeee>Keyword virtual or blank</td>
            </tr>
            <tr align=middle>
                <td bgColor=#dddddd><strong>Time</strong></td>
                <td bgColor=#eeeeee>$HOUR$</td>
                <td bgColor=#eeeeee>Hour formatted as %d</td>
            </tr>
            <tr align=middle>
                <td bgColor=#ffffff></td>
                <td bgColor=#eeeeee>$HOUR_02$</td>
                <td bgColor=#eeeeee>Hour formatted as %02d</td>
            </tr>
            <tr align=middle>
                <td bgColor=#ffffff></td>
                <td bgColor=#eeeeee>$MINUTE$</td>
                <td bgColor=#eeeeee>Minute formatted as %02d</td>
            </tr>
            <tr align=middle>
                <td bgColor=#ffffff></td>
                <td bgColor=#eeeeee>$SECOND$</td>
                <td bgColor=#eeeeee>Second formatted as %02d</td>
            </tr>
        </tbody>
    </table>
    <br>*Reserved strings beginning with $FILE expand using the case of the current file. <br><br>**Lines with whitespace and $selected$ are omitted from expanded code if there is no selection. (This lets you define a single entry to be used with and without a selection.) <br><br>Autotext entries containing $GUID_* are available in IDL files. <br><br>Access the list of reserved strings using the context menu inside the Code field when editing Autotext. <br><br><img height=422 alt=autotextCodeInsertNew.png src="http://www.wholetomato.com/products/features/images/autotext/autotextCodeInsertNew.png" width=477>&nbsp;
<img src ="http://www.cppblog.com/franksunny/aggbug/32223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/franksunny/" target="_blank">frank.sunny</a> 2007-09-14 17:27 <a href="http://www.cppblog.com/franksunny/archive/2007/09/14/32223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>由switch选择结构理解局部变量</title><link>http://www.cppblog.com/franksunny/archive/2007/04/05/21358.html</link><dc:creator>frank.sunny</dc:creator><author>frank.sunny</author><pubDate>Thu, 05 Apr 2007 15:25:00 GMT</pubDate><guid>http://www.cppblog.com/franksunny/archive/2007/04/05/21358.html</guid><wfw:comment>http://www.cppblog.com/franksunny/comments/21358.html</wfw:comment><comments>http://www.cppblog.com/franksunny/archive/2007/04/05/21358.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/franksunny/comments/commentRss/21358.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/franksunny/services/trackbacks/21358.html</trackback:ping><description><![CDATA[&nbsp; <span>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">由</span><span lang=EN-US style="FONT-SIZE: 14pt">switch</span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">选择结构理解局部变量</span><span lang=EN-US style="FONT-SIZE: 14pt"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数体内部自定义变量，称为局部变量，存储于栈（</span><span lang=EN-US>stack</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）中，由编译器自动分配和释放，局部变量的生存期（或者说作用域）是当前函数内部，使用时必须初始化，否则其值将不定。以前对局部变量的定义也就是这么多，而且也就那么在用。近期碰到如下一个问题：</span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333">void func( void ) <o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333">{ <o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>int x = 2; <o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>switch ( x ) <o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>{<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>int m =0;<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//initialization skipped by case0,case1,case2,default <o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>case 0 :<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>int i = 0;<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//initialization skipped by case1,case2,default <o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>{ int j = 1; }<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>// OK, initialized in enclosing block<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>break;<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>case 1 : <o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>break;<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>case 2:<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>break;<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>default:<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>int k = 1;<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// OK, initialization not skipped<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>} <o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt; COLOR: #333333">}<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">遇到这个问题，网上的解答很多，很多人觉得</span><span lang=EN-US>switch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内不能定义局部变量，这个明显是不对的。因为我把代码改成以下形式后就完全可以用了。</span></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt">void func( void ) <o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt">{ <o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>int x = 2; <o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>switch ( x ) <o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>{<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>int m;<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>m = 0;<span style="mso-tab-count: 3">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>//without execute; <o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>case 0:<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>int i;<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>i = 0; <o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>{ int j = 1; }<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>// OK, initialized in enclosing block <o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>printf("%d<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>%d\n", m, i);<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>break;<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>case 1: <o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>i = 1;<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>printf("%d<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>%d\n", m, i);<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>break;<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>case 2:<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>i = 2;<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>printf("%d<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp; </span>%d\n", m, i);<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>break;<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>default:<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>int k = 1;<span style="mso-tab-count: 2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>// OK, initialization not skipped<o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt"><span style="mso-spacerun: yes">&nbsp;&nbsp; </span>} <o:p></o:p></span></strong></p>
<p class=MsoNormal style="BACKGROUND: #cccccc; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24.1pt; mso-char-indent-count: 2.0"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-SIZE: 12pt">}<o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">编译时有一个</span><span lang=EN-US>warning</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，即&#8220;</span><span lang=EN-US>local variable 'm' used without having been initialized</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;，执行结果为：</span><span lang=EN-US>-858993460<span style="mso-tab-count: 1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>2</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">因此</span><span lang=EN-US>switch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内不但可以定义变量，而且也不用像很多人所说的在</span><span lang=EN-US>case</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内遇到要用变量时一定要用</span><span lang=EN-US>{}</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">括起来，不过严格的说不用</span><span lang=EN-US>{}</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">扩起来的变量是是属于整个</span><span lang=EN-US>switch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">块结构的，为此编程一定要将新增变量作用域限定在</span><span lang=EN-US>case</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内就必须要用</span><span lang=EN-US>{}</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0"><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通过</span><span lang=EN-US>switch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#183;&#183;&#183;</span><span lang=EN-US>case</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结构，对局部变量的声明、定义以及初始化等概念可以有一个比较清晰的认识。我的理解就是：声明语句不管是放在哪里，其编译时都是将其置顶到块的头部，如</span><span lang=EN-US>int k</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">虽然在</span><span lang=EN-US>default</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，但是这个变量的声明就在</span><span lang=EN-US>switch</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的</span><span lang=EN-US>{}</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">内，其生存期与变量</span><span lang=EN-US>m</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等同，只是由于前面没有声明，所以</span><span lang=EN-US>default</span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">之前不能用。</span></p>
<p align=center></span></p>
<img src ="http://www.cppblog.com/franksunny/aggbug/21358.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/franksunny/" target="_blank">frank.sunny</a> 2007-04-05 23:25 <a href="http://www.cppblog.com/franksunny/archive/2007/04/05/21358.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网讯笔试归来</title><link>http://www.cppblog.com/franksunny/archive/2007/03/04/19199.html</link><dc:creator>frank.sunny</dc:creator><author>frank.sunny</author><pubDate>Sun, 04 Mar 2007 13:53:00 GMT</pubDate><guid>http://www.cppblog.com/franksunny/archive/2007/03/04/19199.html</guid><wfw:comment>http://www.cppblog.com/franksunny/comments/19199.html</wfw:comment><comments>http://www.cppblog.com/franksunny/archive/2007/03/04/19199.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/franksunny/comments/commentRss/19199.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/franksunny/services/trackbacks/19199.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align="center">
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 14pt; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">网讯笔试归来</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt">
								<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
								<o:p>
								</o:p>
						</span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">昨天去网讯（杭州）笔试了，做了下笔试题，感觉题目都不难，但是自己做的的确不怎么样，估计是没机会去了，不过暂时还是先把几道自己还记得的题目，写出来，总结下，以做复习。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">1、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要求自己实现</span>
				<span lang="EN-US">String</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类，给出了</span>
				<span lang="EN-US">String</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类的以下头文件类声明</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">class String</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">{</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">public:</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>String(const char *m_char = NULL);</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>String(const String &amp; Str);</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>String&amp; operator = (const String &amp;Str);</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>~String();</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">private:</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>char * m_Data;</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">};</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于</span>
				<span lang="EN-US">String</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类的笔试题，以前看林锐的随笔时听说他在微软面试时曾碰到那么一道题目，我自己也没有真的下笔去做过，平常都是拿来就用的，这次自己碰到，才知道会死得那么惨，反正编得不堪入目（我就不拿出来献丑了），下面是我回来后，自己重新写的答案。</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">String::String(const char* m_char)</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">{</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>int m_nLength = strlen(m_char) + 1;</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>if (m_Data != NULL)</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>{</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>delete [] m_Data;</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>m_Data = NULL;</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>}//</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以上判断是否必要</span>
				<span lang="EN-US">??</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>m_Data = new char[m_nLength];</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>memcpy(m_Data, m_char, m_nLength);</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">}</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">String::String(const String &amp;Str)</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">{</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>int m_nLength = strlen(Str.m_Data) + 1;//</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以前真的不知道，原来对象的私有变量</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 194.25pt; mso-char-indent-count: 18.5">
				<span lang="EN-US">//</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在类的实现代码中也是可以访问的</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>if (m_Data != NULL)</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>{</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>delete [] m_Data;</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>m_Data = NULL;</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>}//</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以上判断是否必要</span>
				<span lang="EN-US">??</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>m_Data = new char[m_nLength];</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>memcpy(m_Data, Str.m_Data, m_nLength);</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">}</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">String&amp; String::operator = (const String&amp; Str)<span style="mso-spacerun: yes">  </span></span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">{</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>if(this == &amp;Str)</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>return *this;</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>int m_nLength = strlen(Str.m_Data) + 1;</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>if (m_Data != NULL)</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>{</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>delete [] m_Data;</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>m_Data = NULL;</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>}//</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">以上判断是否必要</span>
				<span lang="EN-US">??</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>
				</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>m_Data = new char[m_nLength];</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>memcpy(m_Data, Str.m_Data, m_nLength);</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>return *this;</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">}</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">String::~String()</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">{</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>if (m_Data != NULL)</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>{</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>delete [] m_Data;</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 2">              </span>m_Data = NULL;</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>}</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">2、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于内存分配</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">这个题目很简单，就给了一个函数，然后问函数内的局部变量存放在哪里，我也不知道为什么当时会选择</span>
				<span lang="EN-US">heap(</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">堆</span>
				<span lang="EN-US">)</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，下面再把几个概念罗列出来：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 47.25pt; TEXT-INDENT: -26.25pt; mso-list: l0 level2 lfo1; tab-stops: list 47.25pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">1.<span style="FONT: 7pt 'Times New Roman'">            </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">堆区（</span>
				<span lang="EN-US">heap</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）：由程序员申请分配和释放，属动态内存分配方式，若程序员不释放，程序结束时可能会由</span>
				<span lang="EN-US">OS</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">回收。不过这个内存分配很容易引起问题，如果申请的内存不释放就会造成内存泄漏；如果释放的不是所要释放的内存，则轻者引起程序运行结果出错，重者系统崩溃。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 47.25pt; TEXT-INDENT: -26.25pt; mso-list: l0 level2 lfo1; tab-stops: list 47.25pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">2.<span style="FONT: 7pt 'Times New Roman'">            </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">栈区（</span>
				<span lang="EN-US">stack</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）：编译器自动分配释放，存放函数的形参值、局部变量的值，也是属于动态内存分配方式，它由系统分配，所以执行效率也高，不过自由度小，声明时就得决定其具体大小。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 47.25pt; TEXT-INDENT: -26.25pt; mso-list: l0 level2 lfo1; tab-stops: list 47.25pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">3.<span style="FONT: 7pt 'Times New Roman'">            </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">全局区（静态区）（</span>
				<span lang="EN-US">static</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">）：全局变量和静态变量的存储是放在一块的，而且初始化的全局变量和静态变量在一块区域，未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放，所以也不会造成内存问题。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; mso-char-indent-count: 2.0">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">除了以上的变量外，还有两类存放位置，文字常量区和程序代码区，两者都是由系统分配和释放，且文字常量区和前面三区合成为程序数据区，与程序代码区相对应。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt">
				<span lang="EN-US" style="mso-fareast-font-family: 'Times New Roman'">
						<span style="mso-list: Ignore">3、<span style="FONT: 7pt 'Times New Roman'">  </span></span>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于类继承的构造和析构函数</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">class Base</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">{</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">public:</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>Base(){cout&lt;&lt; "Base" &lt;&lt;endl;};</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>~Base(){cout&lt;&lt;"~Base"&lt;&lt;endl;};</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">protected:</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">private:</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">};</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">class First:public Base</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">{</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">public:</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>First(){cout &lt;&lt; "First" &lt;&lt; endl;};</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>~First(){cout &lt;&lt; "~First" &lt;&lt;endl;};</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">};</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">int main()</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">{</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>Base *a = new First;</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 1">       </span>delete a;</span>
		</p>
		<p class="MsoNormal" style="BACKGROUND: silver; MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">}</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">问程序的输出会是什么？</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">结果很简单，也就是</span>
				<span lang="EN-US">Base</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-tab-count: 4">                            </span>
						<span style="mso-spacerun: yes">   </span>First</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">                   </span>~Base</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其它还有一个关于</span>
				<span lang="EN-US">&amp;</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的题目，把我搞的云里雾里的，还要再看些东西才知道怎么来解释。</span>
		</p>
<img src ="http://www.cppblog.com/franksunny/aggbug/19199.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/franksunny/" target="_blank">frank.sunny</a> 2007-03-04 21:53 <a href="http://www.cppblog.com/franksunny/archive/2007/03/04/19199.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>由一道面试题来看Struct的对界（再谈结构）</title><link>http://www.cppblog.com/franksunny/archive/2006/10/20/13925.html</link><dc:creator>frank.sunny</dc:creator><author>frank.sunny</author><pubDate>Fri, 20 Oct 2006 13:52:00 GMT</pubDate><guid>http://www.cppblog.com/franksunny/archive/2006/10/20/13925.html</guid><wfw:comment>http://www.cppblog.com/franksunny/comments/13925.html</wfw:comment><comments>http://www.cppblog.com/franksunny/archive/2006/10/20/13925.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/franksunny/comments/commentRss/13925.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/franksunny/services/trackbacks/13925.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 由一道面试题来看 Struct 的对界 &nbsp; 本文节选自宋宝华的C/C++的struct深层探索一文，本人对其所描述的struct对齐比较喜欢，为此转来与大家分享，原文见http://blog.donews.com/21cnbao/archive/2005/09/08/544877.aspx &nbsp; Intel 、微软等公司曾经出过一道类似的面试题： 1. #in...&nbsp;&nbsp;<a href='http://www.cppblog.com/franksunny/archive/2006/10/20/13925.html'>阅读全文</a><img src ="http://www.cppblog.com/franksunny/aggbug/13925.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/franksunny/" target="_blank">frank.sunny</a> 2006-10-20 21:52 <a href="http://www.cppblog.com/franksunny/archive/2006/10/20/13925.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C/C++结构体的一个高级特性――指定成员的位数</title><link>http://www.cppblog.com/franksunny/archive/2006/10/20/13887.html</link><dc:creator>frank.sunny</dc:creator><author>frank.sunny</author><pubDate>Thu, 19 Oct 2006 16:05:00 GMT</pubDate><guid>http://www.cppblog.com/franksunny/archive/2006/10/20/13887.html</guid><wfw:comment>http://www.cppblog.com/franksunny/comments/13887.html</wfw:comment><comments>http://www.cppblog.com/franksunny/archive/2006/10/20/13887.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cppblog.com/franksunny/comments/commentRss/13887.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/franksunny/services/trackbacks/13887.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: C/C++														结构体的一个高级特性														――														指定成员的位数																																																																																						...&nbsp;&nbsp;<a href='http://www.cppblog.com/franksunny/archive/2006/10/20/13887.html'>阅读全文</a><img src ="http://www.cppblog.com/franksunny/aggbug/13887.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/franksunny/" target="_blank">frank.sunny</a> 2006-10-20 00:05 <a href="http://www.cppblog.com/franksunny/archive/2006/10/20/13887.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>