﻿<?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++博客-Gordon.Ma-随笔分类-C/C++</title><link>http://www.cppblog.com/gordon/category/19347.html</link><description>近山则志高，临水而聪慧</description><language>zh-cn</language><lastBuildDate>Fri, 20 Jun 2014 07:00:26 GMT</lastBuildDate><pubDate>Fri, 20 Jun 2014 07:00:26 GMT</pubDate><ttl>60</ttl><item><title>【转载】Google Protocol Buffer 的使用和原理</title><link>http://www.cppblog.com/gordon/archive/2014/06/19/207339.html</link><dc:creator>Gordon-Ma</dc:creator><author>Gordon-Ma</author><pubDate>Thu, 19 Jun 2014 10:06:00 GMT</pubDate><guid>http://www.cppblog.com/gordon/archive/2014/06/19/207339.html</guid><wfw:comment>http://www.cppblog.com/gordon/comments/207339.html</wfw:comment><comments>http://www.cppblog.com/gordon/archive/2014/06/19/207339.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/gordon/comments/commentRss/207339.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gordon/services/trackbacks/207339.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 原文链接： http://www.ibm.com/developerworks/cn/linux/l-cn-gpb/简介什么是 Google Protocol Buffer？ 假如您在网上搜索，应该会得到类似这样的文字介绍：Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准，目前已经正在使用的有超过 48,162 种报文格式定义和...&nbsp;&nbsp;<a href='http://www.cppblog.com/gordon/archive/2014/06/19/207339.html'>阅读全文</a><img src ="http://www.cppblog.com/gordon/aggbug/207339.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gordon/" target="_blank">Gordon-Ma</a> 2014-06-19 18:06 <a href="http://www.cppblog.com/gordon/archive/2014/06/19/207339.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++关键字</title><link>http://www.cppblog.com/gordon/archive/2012/05/22/175763.html</link><dc:creator>Gordon-Ma</dc:creator><author>Gordon-Ma</author><pubDate>Tue, 22 May 2012 07:16:00 GMT</pubDate><guid>http://www.cppblog.com/gordon/archive/2012/05/22/175763.html</guid><wfw:comment>http://www.cppblog.com/gordon/comments/175763.html</wfw:comment><comments>http://www.cppblog.com/gordon/archive/2012/05/22/175763.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/gordon/comments/commentRss/175763.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/gordon/services/trackbacks/175763.html</trackback:ping><description><![CDATA[面试过程中，一些面试官对C++一些特殊关键字很关注；<br />整理了一些比较有说头的关键字<br /><ul><li>explicit</li></ul>用来声明构造函数，被声明的构造函数为显示构造函数，不能在隐式转换中使用。<br />C++中一个参数的构造函数或除第一个参数外均有默认值的多参构造函数，有两个作用：1、构造对象；2、默认且隐式的类型转换操作符。<font class="Apple-style-span" face="arial, 宋体, sans-serif"><span class="Apple-style-span" style="line-height: 24px; "><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;foo<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">explicit</span><span style="color: #000000; ">&nbsp;foo(&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a&nbsp;)<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;_member(&nbsp;a&nbsp;)<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{}<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;_member;<br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">};<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;bar(&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; ">&nbsp;foo&nbsp;</span><span style="color: #000000; ">&amp;</span><span style="color: #000000; ">&nbsp;f&nbsp;)<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">return</span><span style="color: #000000; ">&nbsp;f._member;<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">bar(&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;);&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;失败,&nbsp;explicit禁止int到foo的隐式(implicit)类型转换.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; "><br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">bar(&nbsp;foo(&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;)&nbsp;);&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;正确,&nbsp;显式调用explicit构造函数.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; "><br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">bar(&nbsp;static_cast</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">foo</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">(&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">&nbsp;)&nbsp;);&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;正确,&nbsp;通过static_cast调用explicit构造函数.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; "><br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">bar(&nbsp;foo(&nbsp;</span><span style="color: #000000; ">1.0</span><span style="color: #000000; ">&nbsp;)&nbsp;);&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;正确,&nbsp;显式调用explicit构造函数,&nbsp;参数自动从浮点转换成整型.</span></div><br /><ul><li>mutable</li></ul></span></font><font class="Apple-style-span" face="arial, 宋体, sans-serif"><span class="Apple-style-span" style="line-height: 24px; ">用来声明一个成员变量，被mutable声明的成员变量，可以在被const修饰的成员函数中修改。<br /></span></font><font class="Apple-style-span" face="arial, 宋体, sans-serif"><span class="Apple-style-span" style="line-height: 24px; ">mutable不可与const、static同时使用。</span></font><font class="Apple-style-span" face="arial, 宋体, sans-serif"><span class="Apple-style-span" style="line-height: 24px; "><br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">class</span><span style="color: #000000; ">&nbsp;foo<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;foo()<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;_member(</span><span style="color: #000000; ">0</span><span style="color: #000000; ">)<br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{}<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;ExChange(&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;a&nbsp;)&nbsp;</span><span style="color: #0000FF; ">const</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;{<br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_member&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;a;<br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;}<br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;mutable&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;_member;<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">}</span></div><br /><div><ul><li>volatile</li></ul></div></span></font><font class="Apple-style-span" face="arial, 宋体, sans-serif"><span class="Apple-style-span" style="line-height: 24px; "><div>用以声明一个变量，被volatile声明的变量意味着有可能被某些编译器未知的因素更改，因此编译器不会对其做任何优化操作。</div></span></font><font class="Apple-style-span" face="arial, 宋体, sans-serif"><span class="Apple-style-span" style="line-height: 24px; "><div><div>从而可以提供对特殊地址的稳定访问，多用于嵌入式编程中。</div></div></span></font><font class="Apple-style-span" face="arial, 宋体, sans-serif"><span class="Apple-style-span" style="line-height: 24px; "><div><div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">void</span><span style="color: #000000; ">&nbsp;foo()<br /></span><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">volatile&nbsp;int&nbsp;nData&nbsp;=&nbsp;1;</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;nData&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; ">;<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;nData_b&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;nData;<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">nData&nbsp;=&nbsp;%d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,nData_b);<br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;9</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;c++嵌入asm参见：</span><span style="color: #008000; text-decoration: underline; ">http://asm.sourceforge.net/articles/linasm.html</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">10</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;asm(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">movl&nbsp;$2,&nbsp;-4(%ebp)\n\r</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;修改变量地址内容</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">11</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; "><br /></span><span style="color: #008080; ">12</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">&nbsp;nData_a&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;nData;<br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">nData&nbsp;=&nbsp;%d\n</span><span style="color: #000000; ">"</span><span style="color: #000000; ">,nData_a);<br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #000000; ">使用volatile输出：<br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #000000; ">nData&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #000000; ">nData&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">2</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">19</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">20</span>&nbsp;<span style="color: #000000; ">不使用volatile输出为：<br /></span><span style="color: #008080; ">21</span>&nbsp;<span style="color: #000000; ">nData&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">22</span>&nbsp;<span style="color: #000000; ">nData&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">1</span></div></div></div><br /></span></font> <img src ="http://www.cppblog.com/gordon/aggbug/175763.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/gordon/" target="_blank">Gordon-Ma</a> 2012-05-22 15:16 <a href="http://www.cppblog.com/gordon/archive/2012/05/22/175763.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>