﻿<?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++博客-tommy-随笔分类-C++语言与规范</title><link>http://www.cppblog.com/tommy/category/879.html</link><description>It's hard to tell the world we live in is either a reality or a dream</description><language>zh-cn</language><lastBuildDate>Sat, 19 Jan 2013 09:15:27 GMT</lastBuildDate><pubDate>Sat, 19 Jan 2013 09:15:27 GMT</pubDate><ttl>60</ttl><item><title>vs2012 编译 Qt5.0</title><link>http://www.cppblog.com/tommy/archive/2013/01/19/197410.html</link><dc:creator>Tommy Liang</dc:creator><author>Tommy Liang</author><pubDate>Sat, 19 Jan 2013 05:23:00 GMT</pubDate><guid>http://www.cppblog.com/tommy/archive/2013/01/19/197410.html</guid><wfw:comment>http://www.cppblog.com/tommy/comments/197410.html</wfw:comment><comments>http://www.cppblog.com/tommy/archive/2013/01/19/197410.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tommy/comments/commentRss/197410.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tommy/services/trackbacks/197410.html</trackback:ping><description><![CDATA[资料转自网络:<br /><div>原文在此： http://www.qtcn.org/bbs/simple/?t52158.html</div><br /><span style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;">1 &nbsp;</span><span style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;">安装vs2012 update1</span><br style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;" /><br style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;">2 &nbsp;下载qt5源码包，记住，windows下要下载zip结尾的，不要看到tar.gz的小就下它，tar.gz的源码包不能直接在windows下编译</span><br style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;" /><br style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;">编译</span><br style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;" /><br style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;">1) 我要编译x86， 所以打开vc x86命令提示符，其他版尚未成功</span><br style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;" /><br /><span style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;">2) cd &lt;path&gt;\qt-everywhere-opensource-src-&lt;version&gt;</span><span style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;"><br />&nbsp;&nbsp; configure -prefix %CD%\qtbase -opensource -nomake tests -nomake examples -mp</span><br style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;">&nbsp;&nbsp; 如果想编译例子，可以去掉-nomake examples<br /></span><br style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;" /><span style="font-family: Verdana; font-size: 13.142857551574707px; line-height: normal; background-color: #ffffff;">3) 执行nmake 开始编译。</span><img src ="http://www.cppblog.com/tommy/aggbug/197410.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tommy/" target="_blank">Tommy Liang</a> 2013-01-19 13:23 <a href="http://www.cppblog.com/tommy/archive/2013/01/19/197410.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Qt moc 的一个诡异提示</title><link>http://www.cppblog.com/tommy/archive/2011/06/22/149151.html</link><dc:creator>Tommy Liang</dc:creator><author>Tommy Liang</author><pubDate>Tue, 21 Jun 2011 16:06:00 GMT</pubDate><guid>http://www.cppblog.com/tommy/archive/2011/06/22/149151.html</guid><wfw:comment>http://www.cppblog.com/tommy/comments/149151.html</wfw:comment><comments>http://www.cppblog.com/tommy/archive/2011/06/22/149151.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tommy/comments/commentRss/149151.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tommy/services/trackbacks/149151.html</trackback:ping><description><![CDATA[&nbsp;Warning: No relevant classes found. No output generated<br /><br />百思不得其解之下，想起来有个注释是从word拷过来的，当时提示了一下需要unicode保存，没留意。。。<br /><br />检查头文件，果然是unicode编码，改为gb2312，编译通过。<img src ="http://www.cppblog.com/tommy/aggbug/149151.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tommy/" target="_blank">Tommy Liang</a> 2011-06-22 00:06 <a href="http://www.cppblog.com/tommy/archive/2011/06/22/149151.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于 shared_from_this 的一个要点</title><link>http://www.cppblog.com/tommy/archive/2011/03/24/142679.html</link><dc:creator>Tommy Liang</dc:creator><author>Tommy Liang</author><pubDate>Thu, 24 Mar 2011 15:29:00 GMT</pubDate><guid>http://www.cppblog.com/tommy/archive/2011/03/24/142679.html</guid><wfw:comment>http://www.cppblog.com/tommy/comments/142679.html</wfw:comment><comments>http://www.cppblog.com/tommy/archive/2011/03/24/142679.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tommy/comments/commentRss/142679.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tommy/services/trackbacks/142679.html</trackback:ping><description><![CDATA[不能在构造函数中使用 shared_from_this，正确的做法如下：google自: <a href="http://boost.2283326.n4.nabble.com/enabled-shared-from-this-bad-weak-ptr-exception-online-doc-explanation-td2583370.html"><u><font color=#0066cc>http://boost.2283326.n4.nabble.com/enabled-shared-from-this-bad-weak-ptr-exception-online-doc-explanation-td2583370.html</font></u></a><br><br><span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: rgb(0,0,0); WORD-SPACING: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px" class=Apple-style-span><span style="BORDER-COLLAPSE: collapse; FONT-FAMILY: Verdana, Geneva, Helvetica, Arial, sans-serif; FONT-SIZE: 13px; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px" class=Apple-style-span><span>Since<span class=Apple-converted-space>&nbsp;</span><strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>in</strong><span class=Apple-converted-space>&nbsp;</span>the current version you cannot call<span class=Apple-converted-space>&nbsp;</span><strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>shared_from_this</strong>()<span class=Apple-converted-space>&nbsp;</span><strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>in</strong><span class=Apple-converted-space>&nbsp;</span>a<span class=Apple-converted-space>&nbsp;</span></span><br><span>constructor, you can't<span class=Apple-converted-space>&nbsp;</span><strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>initialize</strong><span class=Apple-converted-space>&nbsp;</span>your<span class=Apple-converted-space>&nbsp;</span><strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>members</strong><span class=Apple-converted-space>&nbsp;</span>with an expression that<span class=Apple-converted-space>&nbsp;</span></span><br><span><strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>invloves</strong><span class=Apple-converted-space>&nbsp;</span><strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>shared_from_this</strong>().<span class=Apple-converted-space>&nbsp;</span><strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>Instead</strong>, you can set your shared_ptr's<span class=Apple-converted-space>&nbsp;</span><strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>in</strong><span class=Apple-converted-space>&nbsp;</span></span><br><span>some<span class=Apple-converted-space>&nbsp;</span><strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>initializing</strong><span class=Apple-converted-space>&nbsp;</span><strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>member</strong><span class=Apple-converted-space>&nbsp;</span>function that would be called after the<span class=Apple-converted-space>&nbsp;</span></span><br><span>object is constructed:<span class=Apple-converted-space>&nbsp;</span></span><br><br><span>struct B;<span class=Apple-converted-space>&nbsp;</span></span><br><span>struct A<span class=Apple-converted-space>&nbsp;</span></span><br><span>{<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; A(shared_ptr&lt;B&gt; b)<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; {<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; &nbsp; //...<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; }<span class=Apple-converted-space>&nbsp;</span></span><br><span>};<span class=Apple-converted-space>&nbsp;</span></span><br><br><span>class B : public enable_shared_from_this&lt;B&gt;<span class=Apple-converted-space>&nbsp;</span></span><br><span>{<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; shared_ptr&lt;A&gt; a_;<span class=Apple-converted-space>&nbsp;</span></span><br><span>public:<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; void<span class=Apple-converted-space>&nbsp;</span><strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>init</strong>()<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; {<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; &nbsp; a_.reset(new A(<strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>shared_from_this</strong>()));<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; }<span class=Apple-converted-space>&nbsp;</span></span><br><span>};<span class=Apple-converted-space>&nbsp;</span></span><br><br><span>main()<span class=Apple-converted-space>&nbsp;</span></span><br><span>{<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; shared_ptr&lt;B&gt; b(new B);<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; b-&gt;<strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>init</strong>();<span class=Apple-converted-space>&nbsp;</span></span><br><span>}<span class=Apple-converted-space>&nbsp;</span></span><br><br><span>...also you can wrap<span class=Apple-converted-space>&nbsp;</span><strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>initialization</strong><span class=Apple-converted-space>&nbsp;</span><strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>in</strong><span class=Apple-converted-space>&nbsp;</span>a static constructing function:<span class=Apple-converted-space>&nbsp;</span></span><br><br><span>class B....<span class=Apple-converted-space>&nbsp;</span></span><br><span>{<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; // like<span class=Apple-converted-space>&nbsp;</span><strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>in</strong><span class=Apple-converted-space>&nbsp;</span>the previous example<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; B()<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; {}<span class=Apple-converted-space>&nbsp;</span></span><br><span>public:<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; static shared_ptr&lt;B&gt; create()<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; {<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; &nbsp; shared_ptr&lt;B&gt; result(new B());<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; &nbsp; result-&gt;<strong style="BACKGROUND-COLOR: rgb(255,255,102); background-origin: initial; background-clip: initial" class=highlight>init</strong>();<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; &nbsp; return result;<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; }<span class=Apple-converted-space>&nbsp;</span></span><br><span>};<span class=Apple-converted-space>&nbsp;</span></span><br><br><span>main()<span class=Apple-converted-space>&nbsp;</span></span><br><span>{<span class=Apple-converted-space>&nbsp;</span></span><br><span>&nbsp; shared_ptr&lt;B&gt; b(B::create());<span class=Apple-converted-space>&nbsp;</span></span><br><span>}<span class=Apple-converted-space>&nbsp;</span></span></span></span>
<img src ="http://www.cppblog.com/tommy/aggbug/142679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tommy/" target="_blank">Tommy Liang</a> 2011-03-24 23:29 <a href="http://www.cppblog.com/tommy/archive/2011/03/24/142679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Boost.SmartPtr</title><link>http://www.cppblog.com/tommy/archive/2011/03/23/142547.html</link><dc:creator>Tommy Liang</dc:creator><author>Tommy Liang</author><pubDate>Wed, 23 Mar 2011 02:01:00 GMT</pubDate><guid>http://www.cppblog.com/tommy/archive/2011/03/23/142547.html</guid><wfw:comment>http://www.cppblog.com/tommy/comments/142547.html</wfw:comment><comments>http://www.cppblog.com/tommy/archive/2011/03/23/142547.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/tommy/comments/commentRss/142547.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tommy/services/trackbacks/142547.html</trackback:ping><description><![CDATA[<p class=docText>Use <tt>scoped_ptr</tt> when</p>
<ul>
    <li>
    <p class=docList>A pointer is used in a scope where an exception may be thrown</p>
    <li>
    <p class=docList>There are several control paths in a function</p>
    <li>
    <p class=docList>The lifetime of a dynamically allocated object can be limited to a specific scope</p>
    <li>
    <p class=docList>Exception safety is important (always!)</p>
    </li>
</ul>
<p>Use <tt>shared_ptr</tt> in the following scenarios: <br></p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;When there are multiple clients of an object, but no explicit owner</p>
<ul>
    <li>
    <p class=docList>When storing pointers in Standard Library containers</p>
    <li>
    <p class=docList>When passing objects to and from libraries without (other) expressed ownership</p>
    <li>
    <p class=docList>When managing resources that need special cleanup<sup class=docFootnote><a class=docLink href="mk:@MSITStore:E:\学习\C++知识-QT\An%20Introduction%20to%20Boost.chm::/0321133544/ch01lev1sec6.html#ch01fn09"><u><font color=#0066cc>[9]</font></u></a></sup></p>
    </li>
</ul>
<p class=docText>Use <tt>weak_ptr</tt> to</p>
<ul>
    <li>
    <p class=docList>Break cyclic dependencies</p>
    <li>
    <p class=docList>Use a shared resource without sharing ownership</p>
    <li>
    <p class=docList>Avoid dangling pointers</p>
    </li>
</ul>
<p class=docList><br>check:<a href="http://my.oschina.net/jackwgm/blog/6695?catalog=23886"><u><font color=#0066cc>http://my.oschina.net/jackwgm/blog/6695?catalog=23886</font></u></a></p>
<img src ="http://www.cppblog.com/tommy/aggbug/142547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tommy/" target="_blank">Tommy Liang</a> 2011-03-23 10:01 <a href="http://www.cppblog.com/tommy/archive/2011/03/23/142547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于C++的 explicit关键字</title><link>http://www.cppblog.com/tommy/archive/2006/02/05/3058.html</link><dc:creator>Tommy Liang</dc:creator><author>Tommy Liang</author><pubDate>Sat, 04 Feb 2006 21:16:00 GMT</pubDate><guid>http://www.cppblog.com/tommy/archive/2006/02/05/3058.html</guid><wfw:comment>http://www.cppblog.com/tommy/comments/3058.html</wfw:comment><comments>http://www.cppblog.com/tommy/archive/2006/02/05/3058.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/tommy/comments/commentRss/3058.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/tommy/services/trackbacks/3058.html</trackback:ping><description><![CDATA[<P>简而言之：explicit修饰的构造函数不能担任转换函数<BR><BR>这个 《<FONT color=#551a8b>ANSI/</FONT><FONT color=#cc0033>ISO C++</FONT><FONT color=#551a8b> Professional Programmer's Handbook </FONT>》是这样说的<BR><BR>explicit Constructors<BR>A constructor that takes a single argument is, by default, an implicit conversion operator, which converts its argument to<BR>an object of its class (see also Chapter 3, "Operator Overloading"). Examine the following concrete example:<BR>class string<BR>{<BR>private:<BR>int size;<BR>int capacity;<BR>char *buff;<BR>public:<BR>string();<BR>string(int size); // constructor and implicit conversion operator<BR>string(const char *); // constructor and implicit conversion operator<BR>~string();<BR>};<BR>Class string has three constructors: a default constructor, a constructor that takes int, and a constructor that<BR>constructs a string from const char *. The second constructor is used to create an empty string object with an<BR>initial preallocated buffer at the specified size. However, in the case of class string, the automatic conversion is<BR>dubious. Converting an int into a string object doesn't make sense, although this is exactly what this constructor does.<BR><BR>Consider the following:<BR>int main()<BR>{<BR>string s = "hello"; //OK, convert a C-string into a string object<BR>int ns = 0;<BR>s = 1; // 1 oops, programmer intended to write ns = 1,<BR>}<BR>In the expression s= 1;, the programmer simply mistyped the name of the variable ns, typing s instead. Normally,<BR>the compiler detects the incompatible types and issues an error message. However, before ruling it out, the compiler first<BR>searches for a user-defined conversion that allows this expression; indeed, it finds the constructor that takes int.<BR>Consequently, the compiler interprets the expression s= 1; as if the programmer had written<BR>s = string(1);<BR>You might encounter a similar problem when calling a function that takes a string argument. The following example<BR>can either be a cryptic coding style or simply a programmer's typographical error. However, due to the implicit<BR>conversion constructor of class string, it will pass unnoticed:<BR>int f(string s);<BR>int main()<BR>{<BR>f(1); // without a an explicit constructor,<BR>//this call is expanded into: f ( string(1) );<BR>//was that intentional or merely a programmer's typo?<BR>}<BR>'In order to avoid such implicit conversions, a constructor that takes one argument needs to be declared explicit:<BR>class string<BR>{<BR>//...<BR>public:<BR>explicit string(int size); // block implicit conversion<BR>string(const char *); //implicit conversion<BR>~string();<BR>};<BR>An explicit constructor does not behave as an implicit conversion operator, which enables the compiler to catch the<BR>typographical error this time:<BR>int main()<BR>{<BR>string s = "hello"; //OK, convert a C-string into a string object<BR>int ns = 0;<BR>s = 1; // compile time error ; this time the compiler catches the typo<BR>}<BR>Why aren't all constructors automatically declared explicit? Under some conditions, the automatic type conversion is<BR>useful and well behaved. A good example of this is the third constructor of string:<BR>string(const char *);<BR><BR>The implicit type conversion of const char * to a string object enables its users to write the following:<BR>string s;<BR>s = "Hello";<BR>The compiler implicitly transforms this into<BR>string s;<BR>//pseudo C++ code:<BR>s = string ("Hello"); //create a temporary and assign it to s<BR>On the other hand, if you declare this constructor explicit, you have to use explicit type conversion:<BR>class string<BR>{<BR>//...<BR>public:<BR>explicit string(const char *);<BR>};<BR>int main()<BR>{<BR>string s;<BR>s = string("Hello"); //explicit conversion now required<BR>return 0;<BR>}<BR>Extensive amounts of legacy C++ code rely on the implicit conversion of constructors. The C++ Standardization<BR>committee was aware of that. In order to not make existing code break, the implicit conversion was retained. However, a<BR>new keyword, explicit, was introduced to the languageto enable the programmer to block the implicit conversion<BR>when it is undesirable. As a rule, a constructor that can be invoked with a single argument needs to be declared<BR>explicit. When the implicit type conversion is intentional and well behaved, the constructor can be used as an<BR>implicit conversion operator.</P><img src ="http://www.cppblog.com/tommy/aggbug/3058.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/tommy/" target="_blank">Tommy Liang</a> 2006-02-05 05:16 <a href="http://www.cppblog.com/tommy/archive/2006/02/05/3058.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>