﻿<?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++博客-大智若愚</title><link>http://www.cppblog.com/Dutyboy/</link><description>拈花一笑，淡然处之……</description><language>zh-cn</language><lastBuildDate>Tue, 07 Apr 2026 04:18:58 GMT</lastBuildDate><pubDate>Tue, 07 Apr 2026 04:18:58 GMT</pubDate><ttl>60</ttl><item><title>C++高级</title><link>http://www.cppblog.com/Dutyboy/archive/2010/12/03/135366.html</link><dc:creator>灭神佛</dc:creator><author>灭神佛</author><pubDate>Fri, 03 Dec 2010 09:23:00 GMT</pubDate><guid>http://www.cppblog.com/Dutyboy/archive/2010/12/03/135366.html</guid><wfw:comment>http://www.cppblog.com/Dutyboy/comments/135366.html</wfw:comment><comments>http://www.cppblog.com/Dutyboy/archive/2010/12/03/135366.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Dutyboy/comments/commentRss/135366.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dutyboy/services/trackbacks/135366.html</trackback:ping><description><![CDATA[<strong style="COLOR: #008080">详细请参考：</strong><a href="http://www.cppblog.com/mzty/archive/2007/08/13/29922.html">http://www.cppblog.com/mzty/archive/2007/08/13/29922.html</a>
<img src ="http://www.cppblog.com/Dutyboy/aggbug/135366.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dutyboy/" target="_blank">灭神佛</a> 2010-12-03 17:23 <a href="http://www.cppblog.com/Dutyboy/archive/2010/12/03/135366.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>场景图管理</title><link>http://www.cppblog.com/Dutyboy/archive/2010/12/01/135173.html</link><dc:creator>灭神佛</dc:creator><author>灭神佛</author><pubDate>Wed, 01 Dec 2010 09:17:00 GMT</pubDate><guid>http://www.cppblog.com/Dutyboy/archive/2010/12/01/135173.html</guid><wfw:comment>http://www.cppblog.com/Dutyboy/comments/135173.html</wfw:comment><comments>http://www.cppblog.com/Dutyboy/archive/2010/12/01/135173.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Dutyboy/comments/commentRss/135173.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dutyboy/services/trackbacks/135173.html</trackback:ping><description><![CDATA[<span style="COLOR: #008080"><strong>详细请参考：</strong></span><a href="http://www.gamengines.com/article-1002.html">http://www.gamengines.com/article-1002.html</a>
<img src ="http://www.cppblog.com/Dutyboy/aggbug/135173.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dutyboy/" target="_blank">灭神佛</a> 2010-12-01 17:17 <a href="http://www.cppblog.com/Dutyboy/archive/2010/12/01/135173.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Scene Graph Resource </title><link>http://www.cppblog.com/Dutyboy/archive/2010/11/30/135050.html</link><dc:creator>灭神佛</dc:creator><author>灭神佛</author><pubDate>Tue, 30 Nov 2010 01:51:00 GMT</pubDate><guid>http://www.cppblog.com/Dutyboy/archive/2010/11/30/135050.html</guid><wfw:comment>http://www.cppblog.com/Dutyboy/comments/135050.html</wfw:comment><comments>http://www.cppblog.com/Dutyboy/archive/2010/11/30/135050.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Dutyboy/comments/commentRss/135050.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dutyboy/services/trackbacks/135050.html</trackback:ping><description><![CDATA[<strong style="COLOR: #008080">Scene Graph Resource: </strong><a href="http://www.gamedev.net/community/forums/topic.asp?topic_id=349829">http://www.gamedev.net/community/forums/topic.asp?topic_id=349829</a>
<img src ="http://www.cppblog.com/Dutyboy/aggbug/135050.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dutyboy/" target="_blank">灭神佛</a> 2010-11-30 09:51 <a href="http://www.cppblog.com/Dutyboy/archive/2010/11/30/135050.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>osg中动态回调更新顶点信息，法线颜色信息等</title><link>http://www.cppblog.com/Dutyboy/archive/2010/11/29/135016.html</link><dc:creator>灭神佛</dc:creator><author>灭神佛</author><pubDate>Mon, 29 Nov 2010 12:21:00 GMT</pubDate><guid>http://www.cppblog.com/Dutyboy/archive/2010/11/29/135016.html</guid><wfw:comment>http://www.cppblog.com/Dutyboy/comments/135016.html</wfw:comment><comments>http://www.cppblog.com/Dutyboy/archive/2010/11/29/135016.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Dutyboy/comments/commentRss/135016.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dutyboy/services/trackbacks/135016.html</trackback:ping><description><![CDATA[<span style="COLOR: #008080"><strong>详细请参考：</strong></span><a href="http://bbs.osgchina.org/archiver/tid-4037.html">http://bbs.osgchina.org/archiver/tid-4037.html</a>
<img src ="http://www.cppblog.com/Dutyboy/aggbug/135016.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dutyboy/" target="_blank">灭神佛</a> 2010-11-29 20:21 <a href="http://www.cppblog.com/Dutyboy/archive/2010/11/29/135016.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一些关于渲染引擎设计,Scene Management的文章</title><link>http://www.cppblog.com/Dutyboy/archive/2010/11/29/135015.html</link><dc:creator>灭神佛</dc:creator><author>灭神佛</author><pubDate>Mon, 29 Nov 2010 12:20:00 GMT</pubDate><guid>http://www.cppblog.com/Dutyboy/archive/2010/11/29/135015.html</guid><wfw:comment>http://www.cppblog.com/Dutyboy/comments/135015.html</wfw:comment><comments>http://www.cppblog.com/Dutyboy/archive/2010/11/29/135015.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Dutyboy/comments/commentRss/135015.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dutyboy/services/trackbacks/135015.html</trackback:ping><description><![CDATA[<span style="COLOR: #008080"><strong>详细请参考：</strong></span><a href="http://www.opengpu.org/bbs/viewthread.php?tid=758">http://www.opengpu.org/bbs/viewthread.php?tid=758</a>
<img src ="http://www.cppblog.com/Dutyboy/aggbug/135015.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dutyboy/" target="_blank">灭神佛</a> 2010-11-29 20:20 <a href="http://www.cppblog.com/Dutyboy/archive/2010/11/29/135015.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++基础</title><link>http://www.cppblog.com/Dutyboy/archive/2010/11/28/134922.html</link><dc:creator>灭神佛</dc:creator><author>灭神佛</author><pubDate>Sun, 28 Nov 2010 13:16:00 GMT</pubDate><guid>http://www.cppblog.com/Dutyboy/archive/2010/11/28/134922.html</guid><wfw:comment>http://www.cppblog.com/Dutyboy/comments/134922.html</wfw:comment><comments>http://www.cppblog.com/Dutyboy/archive/2010/11/28/134922.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Dutyboy/comments/commentRss/134922.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dutyboy/services/trackbacks/134922.html</trackback:ping><description><![CDATA[<strong style="COLOR: #008080">详细请参考</strong>：<a href="http://www.cppblog.com/mzty/archive/2007/03/02/19109.html">http://www.cppblog.com/mzty/archive/2007/03/02/19109.html</a>
<img src ="http://www.cppblog.com/Dutyboy/aggbug/134922.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dutyboy/" target="_blank">灭神佛</a> 2010-11-28 21:16 <a href="http://www.cppblog.com/Dutyboy/archive/2010/11/28/134922.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>#pragma的使用</title><link>http://www.cppblog.com/Dutyboy/archive/2010/11/28/134921.html</link><dc:creator>灭神佛</dc:creator><author>灭神佛</author><pubDate>Sun, 28 Nov 2010 13:15:00 GMT</pubDate><guid>http://www.cppblog.com/Dutyboy/archive/2010/11/28/134921.html</guid><wfw:comment>http://www.cppblog.com/Dutyboy/comments/134921.html</wfw:comment><comments>http://www.cppblog.com/Dutyboy/archive/2010/11/28/134921.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Dutyboy/comments/commentRss/134921.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dutyboy/services/trackbacks/134921.html</trackback:ping><description><![CDATA[<span style="COLOR: #008080"><strong>详细请参考：</strong></span><a href="http://www.cppblog.com/mzty/archive/2006/08/08/10958.html">http://www.cppblog.com/mzty/archive/2006/08/08/10958.html</a>
<img src ="http://www.cppblog.com/Dutyboy/aggbug/134921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dutyboy/" target="_blank">灭神佛</a> 2010-11-28 21:15 <a href="http://www.cppblog.com/Dutyboy/archive/2010/11/28/134921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++对象模型 参考</title><link>http://www.cppblog.com/Dutyboy/archive/2010/11/28/134919.html</link><dc:creator>灭神佛</dc:creator><author>灭神佛</author><pubDate>Sun, 28 Nov 2010 13:01:00 GMT</pubDate><guid>http://www.cppblog.com/Dutyboy/archive/2010/11/28/134919.html</guid><wfw:comment>http://www.cppblog.com/Dutyboy/comments/134919.html</wfw:comment><comments>http://www.cppblog.com/Dutyboy/archive/2010/11/28/134919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Dutyboy/comments/commentRss/134919.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dutyboy/services/trackbacks/134919.html</trackback:ping><description><![CDATA[<strong style="COLOR: #008080">详细请参考：</strong><a href="http://www.cnblogs.com/itech/archive/2009/02/19/1394268.html">http://www.cnblogs.com/itech/archive/2009/02/19/1394268.html</a>
<img src ="http://www.cppblog.com/Dutyboy/aggbug/134919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dutyboy/" target="_blank">灭神佛</a> 2010-11-28 21:01 <a href="http://www.cppblog.com/Dutyboy/archive/2010/11/28/134919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++构造函数中的细节</title><link>http://www.cppblog.com/Dutyboy/archive/2010/11/28/134914.html</link><dc:creator>灭神佛</dc:creator><author>灭神佛</author><pubDate>Sun, 28 Nov 2010 12:24:00 GMT</pubDate><guid>http://www.cppblog.com/Dutyboy/archive/2010/11/28/134914.html</guid><wfw:comment>http://www.cppblog.com/Dutyboy/comments/134914.html</wfw:comment><comments>http://www.cppblog.com/Dutyboy/archive/2010/11/28/134914.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Dutyboy/comments/commentRss/134914.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dutyboy/services/trackbacks/134914.html</trackback:ping><description><![CDATA[<span style="FONT-FAMILY: 微软雅黑; COLOR: #008080">详细请参考：</span><a href="http://www.cppblog.com/mzty/archive/2008/04/02/45998.html">http://www.cppblog.com/mzty/archive/2008/04/02/45998.html</a>
<img src ="http://www.cppblog.com/Dutyboy/aggbug/134914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dutyboy/" target="_blank">灭神佛</a> 2010-11-28 20:24 <a href="http://www.cppblog.com/Dutyboy/archive/2010/11/28/134914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>__declspec关键字详细用法</title><link>http://www.cppblog.com/Dutyboy/archive/2010/11/21/134238.html</link><dc:creator>灭神佛</dc:creator><author>灭神佛</author><pubDate>Sun, 21 Nov 2010 12:38:00 GMT</pubDate><guid>http://www.cppblog.com/Dutyboy/archive/2010/11/21/134238.html</guid><wfw:comment>http://www.cppblog.com/Dutyboy/comments/134238.html</wfw:comment><comments>http://www.cppblog.com/Dutyboy/archive/2010/11/21/134238.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Dutyboy/comments/commentRss/134238.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Dutyboy/services/trackbacks/134238.html</trackback:ping><description><![CDATA[<span style="TEXT-ALIGN: center; 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="TEXT-ALIGN: left; LINE-HEIGHT: 22px; FONT-FAMILY: 微软雅黑; COLOR: #008080; FONT-SIZE: 12pt" class=Apple-style-span>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp; __declspec用于指定所给定类型的实例的与Microsoft相关的存储方式。其它的有关存储方式的修饰符如static与extern等是C和C++语言的ANSI规范，而__declspec是一种扩展属性的定义。扩展属性语法简化并标准化了C和C++语言关于Microsoft的扩展。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>用法：<span style="COLOR: red">__</span><span style="COLOR: red">declspec ( extended-decl-modifier )</span></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>extended-decl-modifier参数如下，可同时出现，中间有空格隔开:</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; COLOR: red; PADDING-TOP: 0px" align=left><em>align （C++）</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">allocate</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">appdomain</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">deprecated （C++）</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">dllimp<wbr style="LINE-HEIGHT: 22px">ort</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">dllexport</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">jitintrinsic</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">naked （C++）</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">noalias</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">noinline</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">noreturn</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">nothrow （C++）</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">novtable</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">process</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">property（C++）</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">restrict</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">selectany</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">thread</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><em style="COLOR: red">uuid（C++）</em></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>1.__declspec关键字应该出现在简单声明的前面。对于出现在*或&amp;后面或者变量声明中标识符的前面的__declspec，编译器将忽略并且不给出警告。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>2.要注意区分__declspec是修饰类型还是修饰变量：</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>__declspec(align(8)) struct Str b;修饰的是变量b。其它地方定义的struct Str类型的变量将不受__declspec(align(8))影响。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>__declspec(align(8)) struct Str {};修饰的是struct Str类型。所有该类型的变量都受__declspec(align(8))影响。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><span style="COLOR: red"><strong>align：</strong></span></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>格式<span style="COLOR: red"><em>：__declspec(align(n)) declarator</em></span></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>其中，n是对齐参数，其有效值是的整数次幂（从到字节），如，，，，或。参数declarator是要设置对齐方式的数据。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>1.使用__declspec(align(n))来精确控制用户自定义数据的对齐方式。你可以在定义struct，union，class或声明变量时使用__declspec(align(n))。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>2.不能为函数参数使用__declspec(align(n))。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>3.如果未使用__declspec(align(#))，编译器将根据数据大小按自然边界对齐。如字节整数按字节边界对齐；字节double按字节边界对齐。类或结构体中的数据，将取数据本身的自然对齐方式和#pragma pack(n)设置的对齐系数中的最小值进行对齐。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>4.__declspec(align(n))和#pragmapack(n)是一对兄弟，前者规定了对齐系数的最小值，后者规定了对齐系数的最大值。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>5.当两者同时出现时，前者拥有更高的优先级。即，当两者同时出现且值矛盾时，后者将不起作用。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>6.当变量size大于等于#pragmapack(n)指定的n，而且__declspec(align(n))指定的数值n比对应类型长度小的时候，这个__declspec(align(n))指定将不起作用。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>7.当#pragmapack(n)指定的值n大于等于所有数据成员size的时候，这个值n将不起作用。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><span style="COLOR: red"><strong>allocate：</strong></span></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>格式<span style="COLOR: red"><em>：__declspec(allocate("segname")) declarator</em></span></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>为数据指定存储的数据段。数据段名必须为以下列举中的一个：</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>co<wbr style="LINE-HEIGHT: 22px">de_seg</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>const_seg</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>da<wbr style="LINE-HEIGHT: 22px">ta_seg</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>init_seg</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>section</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>appdomain：</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>指定托管程序中的每个应用程序域都要有一份指定全局变量或静态成员变量的拷贝。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><span style="COLOR: red"><strong>deprecated：</strong></span></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>与#pragmadeprecated()的作用相同。用于指定函数的某个重载形式是不推荐的。当在程序中调用了被deprecated修饰的函数时，编译器将给出C4996警告，并且可以指定具体的警告信息。该警告信息可以来源于定义的宏。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>例如：</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>// compile with: /W3</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>#defineMY_TEXT "function is deprecated"</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>voidfunc1(void) {}</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>__declspec(deprecated) void func1(int) {}</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>__declspec(deprecated("** this is a deprecated function **")) void func2(int) {}</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>__declspec(deprecated(MY_TEXT)) void func3(int) {}</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>intmain() {</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; func1();</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; func1(1);&nbsp;&nbsp; // C4996，警告信息：warning C4996: 'func1': was declared deprecated</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; func2(1);&nbsp;&nbsp; // C4996，警告信息：warning C4996: 'func2': ** this is a deprecated function **</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; func3(1);&nbsp;&nbsp; // C4996，警告信息：warning C4996: 'func3': function is deprecated</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>}</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><strong style="COLOR: red">dllimp<wbr style="LINE-HEIGHT: 22px">ort，dllexport：</strong></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>格式：</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>__declspec( dllimp<wbr style="LINE-HEIGHT: 22px">ort ) declarator</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>__declspec( dllexport ) declarator</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>分别用来从dll导入函数，数据，或对象以及从dll中导出函数，数据，或对象。相当于定义了dll的接口，为它的客户exe或dll定义可使用的函数，数据，或对象。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>将函数声明成dllexport就可以免去定义模块定义(.DEF)文件。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>dllexport代替了__export关键字。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>被声明为dllexport的C++函数导出时的函数名将会按照C++规则经过处理。如果要求不按照C++规则进行名字处理，请使用.def文件或使用extern "C"。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><span style="COLOR: red"><strong>jitintrinsic：</strong></span></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>格式：__declspec(jitintrinsic)</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>用于标记一个函数或元素是位通用语言运行时(CLR)。主要用于Microsoft提供的某些库中。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>使用jitintrinsic会在函数签名中加入MODOPT(IsJitIntrinsic)。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><span style="COLOR: red"><strong>naked：</strong></span></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>格式：__declspec(naked) declarator</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>此关键字仅用于x86系统，多用于虚拟设备驱动。此关键字可以使编译器在生成代码时不包含任何注释或标记。仅可以对函数的定义使用，不能用于数据声明、定义，或者函数的声明。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><span style="COLOR: red"><strong>noalias：</strong></span></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>仅适用于函数，它指出该函数是半纯粹的函数。半纯粹的函数是指仅引用或修改局部变量、参数和第一层间接参数。它是对编译器的一个承诺，如果该函数引用全局变量或第二层间接指针参数，则编译器会生成中断应用程序的代码。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><span style="COLOR: red"><strong>restrict</strong></span>：</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>格式：__declspec(restrict) return_type f();</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>仅适用于返回指针的函数声明或定义，如，CRT的malloc函数：__declspec(restrict) void *malloc(size_t size);它告诉编译器该函数返回的指针不会与任何其它的指针混淆。它为编译器提供执行编译器优化的更多信息。对于编译器来说，最大的困难之一是确定哪些指针会与其它指针混淆，而使用这些信息对编译器很有帮助。有必要指出，这是对编译器的一个承诺，编译器并不对其进行验证。如果您的程序不恰当地使用__declspec(restrict)，则该程序的行为会不正确。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><span style="COLOR: red"><strong>noinline</strong></span>：</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>因为在类定义中定义的成员函数默认都是inline的，__declspec(naked)用于显式指定类中的某个函数不需要inline(内联)。如果一个函数很小而且对系统性能影响不大，有必要将其声明为非内敛的。例如，用于处理错误情况的函数。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><strong style="COLOR: red">noreturn：</strong></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>一个函数被__declspec(noreturn)所修饰，那么它的含义是告诉编译器，这个函数不会返回，其结果是让编译器知道被修饰为__declspec(noreturn)的函数之后的代码不可到达。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>如果编译器发现一个函数有无返回值的代码分支，编译器将会报C4715警告，或者C2202错误信息。如果这个代码分支是因为函数不会返回从而无法到达的话，可以使用约定__declspec(noreturn)来避免上述警告或者错误。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>将一个期望返回的函数约定为__declspec(noreturn)将导致未定义的行为。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>在下面的这个例子中，main函数没有从else分支返回，所以约定函数fatal为__declspec(noreturn)来避免编译或警告信息。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>__declspec(noreturn) extern void fatal () {}</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>intmain() {</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>if(1)</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; return 1;</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>elseif(0)</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; return 0;</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>else</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; fatal();</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>}</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><span style="COLOR: red"><strong>nothrow:</strong></span></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>格式：return-type __declspec(nothrow) [call-convention] function-name ([argument-list])</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>可用于函数声明。告诉编译器被声明的函数以及函数内部调用的其它函数都不会抛出异常。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><span style="COLOR: red"><strong>novtable：</strong></span></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>可用于任何类声明中，但最好只用于纯接口类，即类本身从不实例化。此关键字的声明将阻止编译器对构造和析构函数的vfptr的初始化。可优化编译后代码大小。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>如果试图实例化一个用__declspec(novtable)声明的类然后访问类中成员，则会在运行时产生访问错误(access violation，即AV)。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>process：</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>表示你的托管应用程序进程应该拥有一份指定全局变量，静态成员变量，或所有应用程序域共享的静态本地变量的拷贝。在使用/clr:pure进行编译时，应该使用__declspec(process)，因为使用/clr:pure进行编译时，在默认情况下，每个应用程序域拥有一份全局和静态变量的拷贝。在使用/clr进行编译时，不必使用__declspec(process)，因为使用/clr进行编译时，在默认情况下，每个进程有一份全局和静态变量的拷贝。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>只有全局变量，静态成员变量，或本地类型的本地静态变量可以用__declspec(process)修饰。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>在使用/clr:pure进行编译时，被声明为__declspec(process)的变量同时也应该声明为const类型。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>如果想每个应用程序域拥有一份全局变量的拷贝时，请使用appdomain。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><span style="COLOR: red"><strong>property：</strong></span></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>格式：</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>__declspec( property( get=get_func_name ) ) declarator</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>__declspec( property( put=put_func_name ) ) declarator</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>__declspec( property( get=get_func_name, put=put_func_name ) ) declarator</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>该属性可用于类或结构定义中的非静态&#8220;虚数据成员&#8221;。实际上就是做了一个映射，把你的方法映射成属性，以供访问。get和put就是属性访问的权限，一个是读的权限，一个是写的权限。当编译器看到被property修饰的数据成员出现在成员选择符("." 或"-&gt;")的右边的时候，它将把该操作转换成get或put方法。该修饰符也可用于类或结构定义中的空数组。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>用法如下：</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>structS {</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; int i;</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; void putprop(int j) {</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = j;</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; }</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; int getprop() {</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return i;</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; }</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; __declspec(property(get = getprop, put = putprop)) int the_prop;</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>};</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>intmain() {</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; S s;</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; s.the_prop = 5;</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; return s.the_prop;</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>}</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><span style="COLOR: red"><strong>selectany：</strong></span></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>格式：__declspec(selectany) declarator</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>在MFC，ATL的源代码中充斥着__declspec(selectany)的声明。selectany可以让我们在.h文件中初始化一个全局变量而不是只能放在.cpp中。比如有一个类，其中有一个静态变量，那么我们可以在.h中通过类似__declspec(selectany) type class::variable = value;这样的代码来初始化这个全局变量。既是该.h被多次include，链接器也会为我们剔除多重定义的错误。对于template的编程会有很多便利。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>用法如下：</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>__declspec(selectany) int x1=1; //正确，x1被初始化，并且对外部可见</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>const__declspec(selectany) int x2 =2; //错误，在C++中，默认情况下const为static；但在C中是正确的，其默认情况下const不为static</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>externconst __declspec(selectany) int x3=3; //正确，x3是extern const，对外部可见</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>externconst int x4;</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>const__declspec(selectany) int x4=4; //正确，x4是extern const，对外部可见</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>extern__declspec(selectany) int x5; //错误，x5未初始化，不能用__declspec(selectany)修饰</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>classX {</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>public:</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>X(int i){i++;};</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>inti;</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>};</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>__declspec(selectany) X x(1); //正确，全局对象的动态初始化</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left><span style="COLOR: red"><strong>thread：</strong></span></p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>格式：__declspec(thread) declarator</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>声明declarator为线程局部变量并具有线程存储时限，以便链接器安排在创建线程时自动分配的存储。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>线程局部存储(TLS)是一种机制，在多线程运行环境中，每个线程分配自己的局部数据。在标准多线程程序中，数据是在多个线程间共享的，而TLS是一种为每个线程分配自己局部数据的机制。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>该属性只能用于数据或不含成员函数的类的声明和定义，不能用于函数的声明和定义。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>该属性的使用可能会影响DLL的延迟载入。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>该属性只能用于静态数据，包括全局数据对象(static和extern)，局部静态对象，类的静态数据成员；不能用于自动数据对象。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>该属性必须同时用于数据的声明和定义，不管它的声明和定义是在一个文件还是多个文件。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>__declspec(thread)不能用作类型修饰符。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>如果在类声明的同时没有定义对象，则__declspec(thread)将被忽略，例如：</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>// compile with: /LD</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>__declspec(thread) class X</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>{</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>public:</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; int I;</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>} x;&nbsp;&nbsp; //x是线程对象</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>X y;&nbsp;&nbsp; //y不是线程对象</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>下面两个例子从语义上来说是相同的：</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>__declspec(thread) class B {</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>public:</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; int da<wbr style="LINE-HEIGHT: 22px">ta;</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>} BObject;&nbsp;&nbsp; //BObject是线程对象</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>classB2 {</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>public:</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>&nbsp;&nbsp; int da<wbr style="LINE-HEIGHT: 22px">ta;</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>};</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>__declspec(thread) B2 BObject2;&nbsp;&nbsp; // BObject2是线程对象</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>uuid：</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>格式：__declspec( uuid("ComObjectGUID") ) declarator</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>将具有唯一标识符号的已注册内容声明为一个变量，可使用__uuidof()调用。</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>用法如下：</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>struct__declspec(uuid("00000000-0000-0000-c000-000000000046")) IUnknown;</p>
<p style="PADDING-BOTTOM: 0px; LINE-HEIGHT: 22px; MARGIN: 0px 0px 10px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 0px" align=left>struct__declspec(uuid("{00020400-0000-0000-c000-000000000046}")) IDispatch;<br><br><span style="COLOR: #ff0000">版权声明：此文摘自网上，非原创，仅供学习参考使用！</span></p>
</span></span>
<img src ="http://www.cppblog.com/Dutyboy/aggbug/134238.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Dutyboy/" target="_blank">灭神佛</a> 2010-11-21 20:38 <a href="http://www.cppblog.com/Dutyboy/archive/2010/11/21/134238.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>