﻿<?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++博客-Think&lt;Br&gt;</title><link>http://www.cppblog.com/think/</link><description>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;宁静致远,淡泊明志</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2026 09:37:15 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2026 09:37:15 GMT</pubDate><ttl>60</ttl><item><title>参加SD 2.0大会的一点感想</title><link>http://www.cppblog.com/think/archive/2009/10/26/sd20.html</link><dc:creator>think</dc:creator><author>think</author><pubDate>Mon, 26 Oct 2009 08:49:00 GMT</pubDate><guid>http://www.cppblog.com/think/archive/2009/10/26/sd20.html</guid><wfw:comment>http://www.cppblog.com/think/comments/99500.html</wfw:comment><comments>http://www.cppblog.com/think/archive/2009/10/26/sd20.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cppblog.com/think/comments/commentRss/99500.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/think/services/trackbacks/99500.html</trackback:ping><description><![CDATA[第一次参加csdn举办的SD2.0技术大会，这种会议不会让人学到什么具体的东西，更多的是让人引发思考。下面列出一点体会：<br><br>1. 不论你是做操作系统开发的还是做应用程序的程序员，你都需要对计算机的原理，操作系统的实现机制，驱动程序是如何工作等等有个通盘的了解，不要再以自己不做操作系统的开发作为不深入学习操作系统机制的借口。<br><br>2. 受欢迎的网站在技术或功能上是可以很简单的，不要把自己的思维局限于在技术或功能上的创新。<br><br>3. 技术上的很多事仅仅只是商业行为，而不是因为对用户有什么特别的好处。<br><br><img src ="http://www.cppblog.com/think/aggbug/99500.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/think/" target="_blank">think</a> 2009-10-26 16:49 <a href="http://www.cppblog.com/think/archive/2009/10/26/sd20.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在不同模块分配和释放内存时出错的原因</title><link>http://www.cppblog.com/think/archive/2008/12/28/70576.html</link><dc:creator>think</dc:creator><author>think</author><pubDate>Sun, 28 Dec 2008 10:29:00 GMT</pubDate><guid>http://www.cppblog.com/think/archive/2008/12/28/70576.html</guid><wfw:comment>http://www.cppblog.com/think/comments/70576.html</wfw:comment><comments>http://www.cppblog.com/think/archive/2008/12/28/70576.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.cppblog.com/think/comments/commentRss/70576.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/think/services/trackbacks/70576.html</trackback:ping><description><![CDATA[<strong>问题：</strong>如果程序的模块中有一个链接到静态C/C++运行期库，那么在这个模块中分配内存而在另一个模块中释放这块内存将失败。
<br><br><strong>原因：</strong>造成失败的原因是分配和释放内存不是由相同的堆管理程序完成的，例如动态链接库中的堆在默认情
况下是由msvcrt.dll中的堆管理程序管理的(以动态链接的方式)，而exe程序的堆在默认情况下是由程序自己的代码管理（以静态链接的方式），由
于它们的堆管理程序不同，当动态链接库分配的内存在exe程序中释放时就会出错，因为exe程序所在的堆并没有分配这块内存，而你却要求它释放这块内存。
<br><br><strong>解决方法：</strong>将程序中所有的模块都链接到C/C++运行期库Multithreaded DLL，修改后所有分配和释放堆上内存的操作都由同一个堆管理程序管理，这样便解决了问题。
<br><br><strong>注意：</strong>VC6中的STL在DLL和程序之间传递会出错。MS建议升级到更高版本或使用第三方STL。 <img src ="http://www.cppblog.com/think/aggbug/70576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/think/" target="_blank">think</a> 2008-12-28 18:29 <a href="http://www.cppblog.com/think/archive/2008/12/28/70576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>小心char类型带来的麻烦</title><link>http://www.cppblog.com/think/archive/2008/12/28/70575.html</link><dc:creator>think</dc:creator><author>think</author><pubDate>Sun, 28 Dec 2008 10:27:00 GMT</pubDate><guid>http://www.cppblog.com/think/archive/2008/12/28/70575.html</guid><wfw:comment>http://www.cppblog.com/think/comments/70575.html</wfw:comment><comments>http://www.cppblog.com/think/archive/2008/12/28/70575.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/think/comments/commentRss/70575.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/think/services/trackbacks/70575.html</trackback:ping><description><![CDATA[<p>char的类型有几种呢？无非是unsigned char 和signed char，是吧。让我们用下面的程序来做个测试</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">template</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">typename&nbsp;T</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;Type<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;inline&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;print()<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Unknow</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;std::endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>};<br><br>template</span><span style="color: #000000;">&lt;&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;Type</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">signed&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;inline&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;print()<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">signed&nbsp;char</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;std::endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>};<br><br>template</span><span style="color: #000000;">&lt;&gt;</span><span style="color: #000000;"><br></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;Type</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">unsigned&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;inline&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;print()<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">unsigned&nbsp;char</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;std::endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>};<br></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp; Type</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">unsigned&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">::print();<br>&nbsp;&nbsp;&nbsp;&nbsp;Type</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">signed&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">::print();<br>&nbsp;&nbsp;&nbsp;&nbsp;Type</span><span style="color: #000000;">&lt;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">::print();<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}<br></span></div>
<br><strong>输出内容：</strong><br>unsigned char<br>signed char<br>Unknow<br><br>结果出乎意料，输出内容说明编译器把unsigned char、signed char和char识别成三种不同的类型。<br>那么char类型是有符号还是无符号呢？通过下面的程序来求证一下（以下程序在Microsoft visual C++ 2003、windows 2003下编译并运行）。<br><br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;c&nbsp;&nbsp; </span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;c;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;std::endl;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div>
<br><strong>输出内容：</strong><br>-1<br><br>输出内容证明char是有符号的，但这并不可靠，各家的编译器不保证
char都是signed或unsigned。可以用IDE修改char有符号还是无符号，在Microsoft visual C++ 2003中,
通过&#8220;项目-&gt;属性-&gt;C/C++-&gt;语言-&gt;默认char无符号&#8221;进行修改<br><br><strong>总结：</strong><br><br>C+
+中char、unsigned char和signed
char是三种类型，因此在函数重载和模板偏特化时，应注意重写它们的三个版本。虽然它们是三种类型，但char不是unsigned
char就是signed char，且char是否有符号可由编译器改变。因此不因编写依赖char是有符号还是无符号的代码。 <br><img src ="http://www.cppblog.com/think/aggbug/70575.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/think/" target="_blank">think</a> 2008-12-28 18:27 <a href="http://www.cppblog.com/think/archive/2008/12/28/70575.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>无法使用stl中max和min的原因</title><link>http://www.cppblog.com/think/archive/2008/12/28/70574.html</link><dc:creator>think</dc:creator><author>think</author><pubDate>Sun, 28 Dec 2008 10:25:00 GMT</pubDate><guid>http://www.cppblog.com/think/archive/2008/12/28/70574.html</guid><wfw:comment>http://www.cppblog.com/think/comments/70574.html</wfw:comment><comments>http://www.cppblog.com/think/archive/2008/12/28/70574.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/think/comments/commentRss/70574.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/think/services/trackbacks/70574.html</trackback:ping><description><![CDATA[<p><strong>问题：</strong>使用std::numeric_limits&lt;int&gt;::max方法时，编译器报warning C4003: &#8220;max&#8221;宏的实参不足。使用std::max、std::min和定义名为max、min方法时也报错。</p>
<p><strong>原因：</strong>由于头文件Windows.h中的定义了宏max和min造成的。在Windows.h头文件中定义了宏max和min，Preprocessor就认为我们使用的是宏max或min，而再调用时调用方法和参数与定义的宏不一致，所以报错。</p>
<p><strong>解决方案：</strong>用括号来改变Preprocessor对方法名的理解。</p>
<p>例：</p>
<div style="border: 0.5pt solid windowtext; padding: 4px 5.4pt; background: #e6e6e6 none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; width: 95%;">
<div><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;使用numeric_limits中的max方法</span><span style="color: #008000;"><br></span><span style="color: #000000;">(std::numeric_limits</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">Byte</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">::max)()<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;使用stl中的max方法</span><span style="color: #008000;"><br></span><span style="color: #000000;">(std::max)(&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">&nbsp;);<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;自定义名为max的方法</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;Number<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;(max)();<br>};<br></span></div>
</div>
<p><strong>参见：</strong><a  href="http://www.jeffhung.net/blog/articles/jeffhung/626/">http://www.jeffhung.net/blog/articles/jeffhung/626/</a> <br></p><img src ="http://www.cppblog.com/think/aggbug/70574.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/think/" target="_blank">think</a> 2008-12-28 18:25 <a href="http://www.cppblog.com/think/archive/2008/12/28/70574.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>