﻿<?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++博客-koobin</title><link>http://www.cppblog.com/koobin/</link><description>我的第一个C++技术Blog</description><language>zh-cn</language><lastBuildDate>Fri, 10 Apr 2026 04:17:31 GMT</lastBuildDate><pubDate>Fri, 10 Apr 2026 04:17:31 GMT</pubDate><ttl>60</ttl><item><title>函数表达式计算器</title><link>http://www.cppblog.com/koobin/archive/2008/08/30/60426.html</link><dc:creator>koobin</dc:creator><author>koobin</author><pubDate>Sat, 30 Aug 2008 04:22:00 GMT</pubDate><guid>http://www.cppblog.com/koobin/archive/2008/08/30/60426.html</guid><wfw:comment>http://www.cppblog.com/koobin/comments/60426.html</wfw:comment><comments>http://www.cppblog.com/koobin/archive/2008/08/30/60426.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koobin/comments/commentRss/60426.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koobin/services/trackbacks/60426.html</trackback:ping><description><![CDATA[这是软件截图，等我将代码整理完毕之后再奉送上。<br>下载此程序点击 <a title=函数表达式计算器 style="COLOR: #ff0000" href="http://www.cppblog.com/Files/koobin/calc_expression.zip"><u>这里</u></a>&nbsp;<br><img src="http://www.cppblog.com/images/cppblog_com/koobin/snap1.png" border=0>&nbsp; <br><img src="http://www.cppblog.com/images/cppblog_com/koobin/snap2.png" border=0> 
<img src ="http://www.cppblog.com/koobin/aggbug/60426.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koobin/" target="_blank">koobin</a> 2008-08-30 12:22 <a href="http://www.cppblog.com/koobin/archive/2008/08/30/60426.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++转型操作符</title><link>http://www.cppblog.com/koobin/archive/2007/01/31/18214.html</link><dc:creator>koobin</dc:creator><author>koobin</author><pubDate>Wed, 31 Jan 2007 06:01:00 GMT</pubDate><guid>http://www.cppblog.com/koobin/archive/2007/01/31/18214.html</guid><wfw:comment>http://www.cppblog.com/koobin/comments/18214.html</wfw:comment><comments>http://www.cppblog.com/koobin/archive/2007/01/31/18214.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/koobin/comments/commentRss/18214.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/koobin/services/trackbacks/18214.html</trackback:ping><description><![CDATA[
		<br />旧的C风格转型几乎允许你把任何类型转换成任何其他类型（当然有些限制）<br /><br />由于他的功能太强大，对于程序员阅读这样的程序会带来很大的识别障碍<br /><br />几乎所有的工作都用(type)expression的方式进行转换<br /><br />为此C++提供了4种新的转型操作符号(cast operation)<br />static_cast,const_cast,dynamic_cast和reinterpret_cast<br /><br />1.static_cast<br />   static_cast基本拥有c风格转型差不多的功能，和相同的限制。比如int向double的转换<br />   int testNum;<br />   static_cast&lt;double&gt;testNum;<br />   同样你也不能将int或者struct转换成pointer,这个转换在c里面也是不允许的<br /><br />   值得注意的是static_cast不支持const向non-const的互相转换，就是说不能排除表达式的常量性<br />   const_cast负责这一功能<br />2.const_cast<br />   const_cast专注于这一功能，应用面很狭窄，大使增加了可读性。<br />   class A{...}<br />   class AB:public A{...}<br />   void Update(AB* xy);<br /><br />   AB ab;<br />   const AB&amp; cab = ab;<br />   Update(&amp;cab);//这样是错误的<br />   Update(const_cast&lt;CAB*&gt;(&amp;cab));//正确，去掉了常量性<br /><br />   但是 const_cast不支持带有继承关系的转换<br />   A* pa = new AB;<br />   Update(const_cast&lt;AB*&gt;pa);//这样是错误的<br />   现在我只需要记住。const_cast最重要的作用就是去除常量性<br />3.dynamic_cast<br />   用来执行继承体系中安全的向下转型或者跨系转换，上面的操作用dynamic_cast是可以支持的<br />   A* pa = new AB;<br />   Update(dynamic_cast&lt;AB*&gt;pa);<br />   注意的是关于此操作符的返回值<br />   如果表达式是pointer ,转换失败的话会得到一个NULL<br />   如果............是ref       ,........................会抛出一个异常<br />   dynamic_cast只能做这一类型的转换，请不要尝试去用dynamic_cast改变表达式的常量性,也无法在缺乏虚函数的型别上使用(比如int to double,这样的转换得使用static_cast)<br />4.reinterpret_cast<br />   这个我了看的不是很透，资料上说与编译环境相关，不具备移植性。<br />   他最常用途是转换(函数指针）的型别<br />   有一个保存函数指针的数组，里面指针指向函数的return 都是void<br />   但是你现在有个函数return为int,这个时候如果你想把这个函数放进funcPtrArray<br />   如果没有转型是可能实现的<br />typedefine void  (*FuncPtr())<br />   int func();<br />   funcPtrArray[0] = &amp;func;//错误，型别不对<br />     funcPtrArray[0]  = reinterpret_cast(FuncPtr)(&amp;func);//正确   <br /><br />   <img src ="http://www.cppblog.com/koobin/aggbug/18214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/koobin/" target="_blank">koobin</a> 2007-01-31 14:01 <a href="http://www.cppblog.com/koobin/archive/2007/01/31/18214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>