金庆的专栏

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  423 随笔 :: 0 文章 :: 454 评论 :: 0 Trackbacks

1. C/C++

posted @ 2022-11-18 10:03 金庆 阅读(132) | 评论 (0)  编辑

posted @ 2022-10-29 11:01 金庆 阅读(122) | 评论 (0)  编辑

posted @ 2022-09-22 16:02 金庆 阅读(155) | 评论 (0)  编辑

posted @ 2021-07-31 15:16 金庆 阅读(279) | 评论 (0)  编辑

posted @ 2021-05-30 09:55 金庆 阅读(287) | 评论 (0)  编辑

posted @ 2019-12-16 18:03 金庆 阅读(2142) | 评论 (0)  编辑

posted @ 2019-09-26 17:19 金庆 阅读(1594) | 评论 (0)  编辑

posted @ 2019-04-04 17:57 金庆 阅读(4161) | 评论 (0)  编辑

posted @ 2018-11-21 10:57 金庆 阅读(811) | 评论 (0)  编辑

posted @ 2018-01-06 11:05 金庆 阅读(702) | 评论 (0)  编辑

posted @ 2017-12-07 14:51 金庆 阅读(1430) | 评论 (0)  编辑

posted @ 2017-08-30 17:25 金庆 阅读(1131) | 评论 (0)  编辑

posted @ 2017-08-05 13:14 金庆 阅读(907) | 评论 (0)  编辑

posted @ 2017-07-31 15:00 金庆 阅读(472) | 评论 (0)  编辑

posted @ 2017-06-07 10:22 金庆 阅读(653) | 评论 (0)  编辑

posted @ 2017-05-26 12:00 金庆 阅读(1266) | 评论 (0)  编辑

posted @ 2017-05-10 16:11 金庆 阅读(721) | 评论 (0)  编辑

posted @ 2017-05-07 10:38 金庆 阅读(757) | 评论 (0)  编辑

posted @ 2017-04-25 11:43 金庆 阅读(783) | 评论 (0)  编辑

posted @ 2017-04-17 14:40 金庆 阅读(1354) | 评论 (0)  编辑

posted @ 2017-03-16 11:40 金庆 阅读(726) | 评论 (0)  编辑

posted @ 2017-02-18 22:18 金庆 阅读(520) | 评论 (0)  编辑

posted @ 2017-01-22 18:06 金庆 阅读(786) | 评论 (0)  编辑

posted @ 2017-01-05 18:42 金庆 阅读(975) | 评论 (0)  编辑

posted @ 2016-12-28 11:02 金庆 阅读(2750) | 评论 (0)  编辑

posted @ 2016-12-12 17:16 金庆 阅读(877) | 评论 (0)  编辑

posted @ 2016-12-09 22:17 金庆 阅读(498) | 评论 (0)  编辑

posted @ 2016-12-05 15:31 金庆 阅读(692) | 评论 (0)  编辑

posted @ 2016-11-18 16:19 金庆 阅读(803) | 评论 (0)  编辑

posted @ 2016-09-28 17:44 金庆 阅读(1298) | 评论 (0)  编辑

posted @ 2016-07-19 16:09 金庆 阅读(398) | 评论 (0)  编辑

posted @ 2016-07-08 18:46 金庆 阅读(413) | 评论 (0)  编辑

posted @ 2016-05-26 12:03 金庆 阅读(550) | 评论 (0)  编辑

posted @ 2016-05-20 12:17 金庆 阅读(1826) | 评论 (1)  编辑

posted @ 2016-04-25 15:46 金庆 阅读(608) | 评论 (0)  编辑

posted @ 2016-04-23 08:48 金庆 阅读(514) | 评论 (0)  编辑

posted @ 2016-03-15 15:53 金庆 阅读(930) | 评论 (0)  编辑

posted @ 2016-03-10 20:28 金庆 阅读(385) | 评论 (0)  编辑

posted @ 2016-01-20 14:46 金庆 阅读(372) | 评论 (0)  编辑

posted @ 2016-01-15 14:46 金庆 阅读(1616) | 评论 (0)  编辑

posted @ 2015-12-31 18:35 金庆 阅读(561) | 评论 (0)  编辑

posted @ 2015-02-28 21:33 金庆 阅读(597) | 评论 (0)  编辑

posted @ 2015-02-22 10:08 金庆 阅读(494) | 评论 (0)  编辑

posted @ 2015-01-27 19:07 金庆 阅读(454) | 评论 (0)  编辑

posted @ 2015-01-23 16:11 金庆 阅读(396) | 评论 (0)  编辑

posted @ 2015-01-20 12:18 金庆 阅读(1280) | 评论 (0)  编辑

posted @ 2014-12-07 23:11 金庆 阅读(1229) | 评论 (0)  编辑

posted @ 2014-11-07 09:45 金庆 阅读(1175) | 评论 (0)  编辑

posted @ 2014-11-04 21:00 金庆 阅读(567) | 评论 (0)  编辑

posted @ 2014-09-11 16:20 金庆 阅读(1504) | 评论 (0)  编辑

posted @ 2014-04-29 11:15 金庆 阅读(812) | 评论 (0)  编辑

posted @ 2014-04-04 20:55 金庆 阅读(845) | 评论 (0)  编辑

posted @ 2014-03-29 09:37 金庆 阅读(1266) | 评论 (0)  编辑

posted @ 2014-02-28 12:36 金庆 阅读(618) | 评论 (0)  编辑

posted @ 2014-02-26 11:47 金庆 阅读(581) | 评论 (0)  编辑

posted @ 2014-02-10 08:50 金庆 阅读(545) | 评论 (0)  编辑

posted @ 2014-02-02 14:44 金庆 阅读(758) | 评论 (0)  编辑

posted @ 2014-01-27 14:58 金庆 阅读(621) | 评论 (0)  编辑

posted @ 2014-01-19 13:15 金庆 阅读(406) | 评论 (0)  编辑

posted @ 2014-01-18 16:26 金庆 阅读(463) | 评论 (0)  编辑

posted @ 2014-01-15 17:18 金庆 阅读(942) | 评论 (0)  编辑

posted @ 2013-12-11 10:12 金庆 阅读(877) | 评论 (0)  编辑

posted @ 2013-12-08 21:19 金庆 阅读(2361) | 评论 (0)  编辑

posted @ 2013-11-29 17:08 金庆 阅读(762) | 评论 (0)  编辑

posted @ 2013-11-25 18:09 金庆 阅读(1065) | 评论 (0)  编辑

posted @ 2013-11-22 15:56 金庆 阅读(1029) | 评论 (0)  编辑

posted @ 2013-11-22 12:10 金庆 阅读(826) | 评论 (0)  编辑

posted @ 2013-09-24 17:44 金庆 阅读(3064) | 评论 (0)  编辑

posted @ 2013-09-18 11:03 金庆 阅读(728) | 评论 (0)  编辑

posted @ 2013-08-30 12:20 金庆 阅读(698) | 评论 (0)  编辑

posted @ 2013-08-08 11:45 金庆 阅读(7152) | 评论 (0)  编辑

posted @ 2013-07-12 11:41 金庆 阅读(795) | 评论 (0)  编辑

posted @ 2013-06-25 14:42 金庆 阅读(1318) | 评论 (0)  编辑

posted @ 2013-06-03 10:18 金庆 阅读(1107) | 评论 (0)  编辑

posted @ 2013-05-10 09:15 金庆 阅读(1376) | 评论 (0)  编辑

posted @ 2013-01-23 18:30 金庆 阅读(3176) | 评论 (5)  编辑

posted @ 2013-01-09 14:10 金庆 阅读(2612) | 评论 (0)  编辑

posted @ 2012-12-17 17:18 金庆 阅读(1015) | 评论 (0)  编辑

posted @ 2012-11-19 20:29 金庆 阅读(1473) | 评论 (3)  编辑

posted @ 2012-08-15 12:30 金庆 阅读(1997) | 评论 (0)  编辑

posted @ 2012-08-02 18:18 金庆 阅读(6263) | 评论 (0)  编辑

posted @ 2012-08-01 16:23 金庆 阅读(1432) | 评论 (0)  编辑

posted @ 2012-07-11 12:15 金庆 阅读(1168) | 评论 (0)  编辑

posted @ 2012-07-11 11:11 金庆 阅读(3815) | 评论 (0)  编辑

posted @ 2012-06-20 13:28 金庆 阅读(1138) | 评论 (2)  编辑

posted @ 2012-04-13 10:25 金庆 阅读(1592) | 评论 (0)  编辑

posted @ 2012-03-27 13:56 金庆 阅读(7149) | 评论 (0)  编辑

posted @ 2012-02-21 14:27 金庆 阅读(2110) | 评论 (0)  编辑

posted @ 2012-02-13 11:05 金庆 阅读(481) | 评论 (0)  编辑

posted @ 2011-11-24 18:02 金庆 阅读(1222) | 评论 (3)  编辑

posted @ 2011-11-16 13:31 金庆 阅读(378) | 评论 (0)  编辑

posted @ 2011-10-10 16:48 金庆 阅读(586) | 评论 (0)  编辑

posted @ 2011-09-19 15:53 金庆 阅读(418) | 评论 (0)  编辑

posted @ 2011-08-17 11:43 金庆 阅读(1033) | 评论 (1)  编辑

posted @ 2011-07-13 10:40 金庆 阅读(945) | 评论 (0)  编辑

posted @ 2011-06-16 10:35 金庆 阅读(2129) | 评论 (0)  编辑

posted @ 2011-01-14 15:57 金庆 阅读(508) | 评论 (0)  编辑

posted @ 2010-10-19 10:21 金庆 阅读(547) | 评论 (0)  编辑

     摘要: 调用预编译器cpp预编译main.cpp生成main.i文件:
$cpp main.cpp > main.i
或者:
$gcc -E main.cpp > main.i

生成的行号标志中有如下格式的:
# 1 “/usr/include/features.h” 1 3 4  阅读全文
posted @ 2010-09-15 10:53 金庆 阅读(561) | 评论 (0)  编辑

posted @ 2010-09-09 00:27 金庆 阅读(706) | 评论 (0)  编辑

     摘要: 那些仅使用公共接口就可以完成的操作都可以提取出来。
平时应该尽量优先使用公共接口完成功能,以方便日后的类拆分。
  阅读全文
posted @ 2010-04-21 09:32 金庆 阅读(424) | 评论 (0)  编辑

     摘要: 类不变式的实现: 每个类定义一个非公有的非虚方法isValid(),不带参数,返回布尔值。  阅读全文
posted @ 2010-04-12 10:18 金庆 阅读(707) | 评论 (0)  编辑

     摘要: dl_call()是StlSoft库中的功能。
dl_call()以一种自然的语法,调用动态链接库中的函数。  阅读全文
posted @ 2010-03-26 17:43 金庆 阅读(593) | 评论 (0)  编辑

     摘要: 100%代码覆盖率的单元测试并不代表是足够的测试,下面是一个例子:  阅读全文
posted @ 2010-03-09 09:42 金庆 阅读(3847) | 评论 (0)  编辑

     摘要: 前几天,KOK3客户端因为我的资源配置错误而崩溃了。
调试器带我到了出错的代码行,是一个空指针解引用。
代码大致如下:
  阅读全文
posted @ 2010-02-11 09:48 金庆 阅读(4471) | 评论 (11)  编辑

     摘要: 有个随机数生成函数,按以下分布随机生成1个1-100的整数:90%概率为1-50,10%概率为51-100.
单元测试应该如何进行呢?
生成10000个数然后计算分布比例应该可以,只要在90%上下就算通过。
但是仍有极小可能产生测试失败的可能。
如何做一个具有确定性结论的测试用例?   阅读全文
posted @ 2010-01-09 12:24 金庆 阅读(1199) | 评论 (3)  编辑

     摘要: C++类定义中应该允许设置默认值目前C++的类成员初始化方式是成员初始化列表,在构造函数原型之后,以冒号分隔:A::A() : _n(0), _m(0) { ... } 成员初始化列表这种方式很容易忘记或遗漏某个成员的初始化。  阅读全文
posted @ 2009-12-12 11:20 金庆 阅读(1865) | 评论 (3)  编辑

posted @ 2009-11-03 14:05 金庆 阅读(579) | 评论 (1)  编辑

posted @ 2009-10-26 09:34 金庆 阅读(3033) | 评论 (17)  编辑

posted @ 2009-09-21 13:32 金庆 阅读(2278) | 评论 (5)  编辑

posted @ 2009-08-21 16:32 金庆 阅读(3442) | 评论 (3)  编辑

posted @ 2009-08-03 17:35 金庆 阅读(2300) | 评论 (10)  编辑

posted @ 2009-05-22 13:59 金庆 阅读(7106) | 评论 (4)  编辑

posted @ 2009-05-18 18:52 金庆 阅读(688) | 评论 (0)  编辑

     摘要: 求数组的大小,感觉boost库中应该有这个功能, 找了好长时间, 终于找到了.
原来是boost::extent, 属于boost::type_traits.  阅读全文
posted @ 2009-05-07 13:24 金庆 阅读(1947) | 评论 (3)  编辑

     摘要: WorldSession中总共有300多个指令包处理函数, 以Handle开头, 无返回值, 参数为WorldPacket&. 例如: void HandleCharEnumOpcode(WorldPacket& recvPacket); 处理函数按功能分散在多个XXXHandler.cpp中实现. 例如: ArenaTeamHandler.cpp, AuctionHouseHandler.cpp.   阅读全文
posted @ 2009-04-15 18:07 金庆 阅读(1440) | 评论 (0)  编辑

     摘要: 以Mangos代码为参考, 解析SRP6的原理和实现. SRP全称Secure Remote Password(安全远程密码),是一个开源认证协议。  阅读全文
posted @ 2009-04-10 13:06 金庆 阅读(4060) | 评论 (0)  编辑

     摘要: luabind-0.8只提供了bjam编译方式.
按手册上的要求,设置好BOOST_ROOT和LUA_PATH后, 运行bjam, 报错:  阅读全文
posted @ 2009-04-03 09:36 金庆 阅读(1908) | 评论 (0)  编辑

     摘要: 用boost::spirit实现一个表达式求值看上去比较简单。我这个还有点问题,有空格时会解析失败,请大家看看是什么原因?  阅读全文
posted @ 2009-03-27 16:24 金庆 阅读(2433) | 评论 (9)  编辑

     摘要: 以下代码以C语言为基准,测试了C调用Lua循环和循环调用Lua的效率。结论是不要频繁地穿越C/Lua边界.   阅读全文
posted @ 2009-02-17 09:32 金庆 阅读(8985) | 评论 (4)  编辑

     摘要: 默认所有日志等级为WARN, 不会输出DEBUG日志,
只需显式设定某一类日志的级别, 就可以选择性地输出该类日志.
如调试A类时, 取消配置文件中的注释就行了.  阅读全文
posted @ 2009-02-16 14:48 金庆 阅读(4037) | 评论 (4)  编辑

     摘要: 定义字符串长度有两种方式, 一种是用字符串的大小, 一种是字符串的长度.
字符串的大小即内存空间的大小, 而串长度加1才是所需空间.  阅读全文
posted @ 2009-01-07 19:31 金庆 阅读(3344) | 评论 (0)  编辑

posted @ 2008-12-22 09:33 金庆 阅读(3815) | 评论 (1)  编辑

     摘要: STL迭代的代码写过许多, 突然出现这种错误有点不敢相信. 仔细看了一遍没有拼写错误, 又判断不出是什么错.  阅读全文
posted @ 2008-12-16 12:59 金庆 阅读(2588) | 评论 (0)  编辑

     摘要: 查看log4cxx代码的时候, 看到了一个PropertyWatchdog类, class PropertyWatchdog : public FileWatchdog 是定时检测log4j.properities配置文件的. 这正是我一直想要的功能, 更改配置无需重启就生效.
  阅读全文
posted @ 2008-12-02 09:50 金庆 阅读(1739) | 评论 (0)  编辑

     摘要: 但是有大半的使用情况下, 流方式输出会显得冗长, 格式控制也没有printf简洁. 只有简单的输出才会使用流. 幸好有boost::format. 它就是类型安全的printf. log4cxx配合boost::format真是绝配. 例如:  阅读全文
posted @ 2008-11-20 19:46 金庆 阅读(5028) | 评论 (2)  编辑

     摘要: 写锁之后读锁竟然没有阻塞, 顺利运行下去了.据常理,写锁之后,试图读加锁时会阻塞.代码如:
  阅读全文
posted @ 2008-11-14 10:47 金庆 阅读(5470) | 评论 (1)  编辑

     摘要: STL容器如果元素类型不同是不能相互赋值的,即使元素类型是兼容的.如两个list, 一个存放基类B指针, 一个存放派生类D指针:  阅读全文
posted @ 2008-11-12 12:17 金庆 阅读(2521) | 评论 (6)  编辑

     摘要: 转自:用bind来解耦 应用了boost::bind, boost::function, boost::test 代码稍有修改。

  阅读全文
posted @ 2008-09-12 16:52 金庆 阅读(921) | 评论 (0)  编辑

     摘要: 以下代码中,SetValConst()是const类A的const方法,却能更改A的非mutable成员。涉及的C++概念:bitwise constness
  阅读全文
posted @ 2008-08-27 19:10 金庆 阅读(632) | 评论 (10)  编辑

     摘要: "multiple definition of" 错误 在global.h定义了一个常量字符串,在多个cpp中包含该global.h.  阅读全文
posted @ 2008-08-26 20:12 金庆 阅读(10959) | 评论 (18)  编辑

     摘要: libevent版本为libevent-1.4.5-stable。WIN32-Prj目录下有VC项目文件。libevent.sln不能用,因为只有regress有vcproj文件,其他子项目都是dsp文件。而libevent.dsw不包括regress。删除sln文件,直接打开dsw文件,自动转换除regress之外的4个工程为vcproj。fatal error C1083: 无法打开包括文件:“sys/time.h”
  阅读全文
posted @ 2008-07-07 09:22 金庆 阅读(10390) | 评论 (21)  编辑

     摘要: 本教程不是用来线性阅读的。 其顶层结构大致按库中不同的概念划分,(如处理调用多个插槽、传值到插槽及回传),并且在每一个这些概念中,首先介绍其基本思想,然后说明库较复杂的使用。 每个部分都标注了初级、 中级,或高级,以帮助指导读者。 初级部分包括库的所有使用者都该了解的信息;只要阅读了初级部分,就可以很好地使用信号库。 中级部分建立在初级 部分之上,是库的稍复杂的使用。 最后,高级部分详述了信号库很高级的应用,这往往需要对初级和中级内容扎实的实践经验;大多数用户无需阅读高级部分

  阅读全文
posted @ 2008-06-30 14:55 金庆 阅读(2178) | 评论 (3)  编辑

     摘要: 下载:Boost.Python中文文档
Boost文档中Python库文档的翻译。  阅读全文
posted @ 2008-06-16 11:30 金庆 阅读(1827) | 评论 (0)  编辑

     摘要: Boost.date_time库明确不支持VC6。实际上,只要稍作修改,就可兼容VC6。而且只是代码风格上的调整,修改后比原来的代码更简洁。  阅读全文
posted @ 2008-06-12 09:59 金庆 阅读(2050) | 评论 (3)  编辑

     摘要: 一个函数模板即有特化版又有重载版,编译器会选哪个?以下代码来自:为什么不要特化函数模版 的例3  阅读全文
posted @ 2008-06-11 11:03 金庆 阅读(1338) | 评论 (4)  编辑

     摘要: Boost.Python是一个开源C++库,它提供了一个简明的IDL式的接口,用于把C++类和函数绑定到Python。借助C++强大的编译时内省能力和最近发展的元编程技术,绑定工作完全用纯C++实现,而没有引入新的语法。 Boost.Python丰富的特性和高级接口,使得完全按混合系统设计软件包成为可能,并让程序员以轻松连贯的方式,同时使用 C++高效的编译时多态,和Python极端便利的运行时多态。  阅读全文
posted @ 2008-05-29 13:11 金庆 阅读(7631) | 评论 (15)  编辑

     摘要: SIP generates the fastest wrappers; SWIG is mature and well documented; Boost.Python most elegant integration of C++ and Python  阅读全文
posted @ 2008-05-23 11:39 金庆 阅读(756) | 评论 (0)  编辑

     摘要: 资源获取即初始化(RAII, Resource Acquisition Is Initialization)是指,当你获得一个资源的时候,不管这个资源是对象、内存、文件句柄或者其它什么,你都会在一个对象的构造函数中获得它,并且在该对象的析构函数中释放它。可以依据资源可变性和资源来源这两个特征,来对RAII进行分类。  阅读全文
posted @ 2008-05-20 14:24 金庆 阅读(6306) | 评论 (0)  编辑

     摘要: C++关键字namespace提供的名字空间是开放的:你可以在任何时候扩展其中的内容。只要另外声明一个同名的名字空间即可。为得到真正封闭的名字空间,你需要使用class/union/struct,就像这样  阅读全文
posted @ 2008-05-19 16:44 金庆 阅读(1331) | 评论 (0)  编辑

     摘要: 用CodeBlocks编译一个wxWidgets应用程序时,总是出现"undefined reference"。这里有两个问题,一是需要添加wxWidgets相关的库,二是这些库要按一定的顺序列出。  阅读全文
posted @ 2008-05-15 14:13 金庆 阅读(1781) | 评论 (1)  编辑

     摘要: 在设计时发现错误总比在编码编译时发现好。在编码编译时发现错误总比在单元测试中发现好。在单元测试中发现错误总比在调试中发现好。在调试中发现错误总比在系统测试中发现好。在系统测试中发现错误总比让用户发现好。让用户发现错误总比没有用户好。  阅读全文
posted @ 2008-05-08 15:38 金庆 阅读(337) | 评论 (0)  编辑

     摘要: 在迭代器中支持指针成员选取运算符,没什么实质的意义,而仅仅是语法糖。我认为标准中将这规定为迭代器概念的一个特性是严重的错误。  阅读全文
posted @ 2008-04-24 10:16 金庆 阅读(1954) | 评论 (5)  编辑

     摘要: C++标准库提供了四种序列容器:deque、list、vector,和basic_string。第四种序列容器basic_string,主要用于表示字符串,但它确实是不折不扣的序列容器,所以如果你非要这样做的话,你也可以用它来保存char和wchar_t以外的数据。在标准库中的容器中,只有vector保证其元素的存储空间是连续的。因此,它和C API兼容。
  阅读全文
posted @ 2008-04-23 15:36 金庆 阅读(2132) | 评论 (2)  编辑

     摘要: 在C++的世界里,STL这个术语是有歧义的。有很多C++纯化论者会抓住一切机会纠正你对"STL"这个术语的错用,而告诉你应该使用"标准库"这样的称呼。 严格来说,STL指的是由Stepanov和他的同事们在上世纪80年代到90年代开发的、基于六个核心概念的通用模板库。  阅读全文
posted @ 2008-04-22 17:25 金庆 阅读(2344) | 评论 (1)  编辑

     摘要: 模板参数一般是一个或者两个大写字母,例如T(type/value-type)、S(sequence/string)、 C(container/character)、VP(value policy type)等等。 这样做有两个原因。  阅读全文
posted @ 2008-04-21 17:25 金庆 阅读(2170) | 评论 (10)  编辑

     摘要: POD(Plain Old Data,普通旧式数据)的定义中,有三个相关的术语  阅读全文
posted @ 2008-04-01 10:03 金庆 阅读(1336) | 评论 (0)  编辑

     摘要: 每次用bjam编译boost总是要查看帮助文件才行。
虽然现在的bjam编译命令只有两三个参数,可是不小心还是会错。
  阅读全文
posted @ 2008-03-17 17:21 金庆 阅读(1875) | 评论 (2)  编辑

     摘要: boost.asio库明确说明不支持VC6。 stlsoft库某些组件无法兼容VC6(详细阅读了《Extended STL》,才知道为了VC6要耗费大量的精力,有些组件本身已很复杂,以至于需要排除VC6才能实现。) 今天使用boost.date_time时又发现VC6不行了。  阅读全文
posted @ 2008-03-14 15:58 金庆 阅读(6273) | 评论 (35)  编辑

     摘要: 不过一直有个问题,就是写ini文件时断电的后果。前几天终于遇上了,断电后发现配置文件正好被清空了。结果程序因为缺乏必要的配置,根本无法运行。  阅读全文
posted @ 2008-01-29 12:16 金庆 阅读(2459) | 评论 (8)  编辑

     摘要: 使用Boost.Python不需要“安装Boost”。这里的教程利用了 Boost.Build 项目,它会在需要时自动构建那些二进制库。当然,也可以使用其他的编译系统。所有“我无法编译Boost.Python”的问题, 99%以上是因为试图使用另一种编译系统,而没有先按这个教程做。  阅读全文
posted @ 2008-01-17 15:14 金庆 阅读(3221) | 评论 (2)  编辑

     摘要: 用bjam在各种环境下编译Boost , 没有十次也有八次了,但是前两天在一台XP上编译时,竟然失败。 查看输出,竟然是在创建目录时失败。信息如下:  阅读全文
posted @ 2008-01-11 09:38 金庆 阅读(1930) | 评论 (1)  编辑

     摘要: 以下代码来自《Imperfect C++》,输出是0, 2222还是0, 0?  阅读全文
posted @ 2008-01-10 11:36 金庆 阅读(1738) | 评论 (11)  编辑

     摘要: 对于一个数组ar,求其最外层的维数。 C语言当中惯用的是 sizeof(ar) / sizeof(ar[0]),可是在stlsoft库中是 sizeof(ar) / sizeof(0[ar])。 以前从没见过数组元素引用使用这样的形式:0[ar],能行吗?但是为什么用0[ar]呢?生僻的用法降低了可读性。是不是有什么优点呢?都是编译期计算,应该没有性能上的差别。  阅读全文
posted @ 2008-01-02 11:27 金庆 阅读(2563) | 评论 (4)  编辑

     摘要: 试运行asio的async_client例程时,发现CPU占用很高,所以又写了一个相同功能但直接调用完成端口API的代码,进行比较,发现同样占用CPU。  阅读全文
posted @ 2007-12-24 16:25 金庆 阅读(2318) | 评论 (4)  编辑

     摘要: 可重入函数要解决的问题是,不在函数内部使用静态或全局数据,不返回静态或全局数据,也不调用不可重入函数。线程安全函数要解决的问题是,多个线程调用函数时访问资源冲突。函数如果使用静态变量,通过加锁后可以转成线程安全函数,但仍然有可能不是可重入的,比如strtok。  阅读全文
posted @ 2007-12-19 15:15 金庆 阅读(1329) | 评论 (0)  编辑

     摘要: BOOST_STATIC_ASSERT是一个简单但常用的宏,顾名思义起到编译期断言的功效,可以通过它,在编译时对开发环境以及类型定义进行检查。此类型检测对程序运行时无任何效率和空间上的影响。在实现上,BOOST_STATIC_ASSERT宏利用c++规范中,对不完整类型即不可实例化的类型,在对其进行sizeof运算时编译错误的特性,完成功能。  阅读全文
posted @ 2007-12-14 10:02 金庆 阅读(1011) | 评论 (1)  编辑

     摘要: 看到一段istream_iterator的使用代码,读取文件test.txt,将其中字符串输入到一个vector。STL中模板的大量使用,使得编译器的报错不知所云,让人对STL的应用望而却步。学习STL不仅要掌握STL中各种容器类,迭代器,算法,同时还要熟悉编译器常见的错误报告。  阅读全文
posted @ 2007-12-12 11:41 金庆 阅读(3641) | 评论 (2)  编辑

     摘要: 在*.h文件中定义一个类时,理论上应该仅定义其公共接口,而不必声明其私有的成员,因为私有的成员属于实现部分,理应声明在.cpp文件中。 可是现有的C++标准是不支持将一个类的定义分到两个文件中去的。 有一个pimpl模式,可以变相完成这个要求。  阅读全文
posted @ 2007-11-09 12:07 金庆 阅读(1903) | 评论 (13)  编辑

     摘要: WMF SDK指Microsoft的Windows Media Format SDK,支持以下三大功能:ASF文件的生成(包括ASF数据的流化)、ASF文件的编辑和ASF文件的播放(包括ASF媒体流的播放)。目前版本是WMF SDK9。 wmvcopy是其一个例程,实现了从头部开始截取n秒另存为文件。但在使用中发现有些错误。所以应该另设一个标志:m_fMaxDuration,到达MaxDuration时就可以结束文件的读取,而不必一直读到文件尾。一可解决崩溃错误,二可提高效率。   阅读全文
posted @ 2007-10-29 14:47 金庆 阅读(1420) | 评论 (3)  编辑

     摘要: XYNTService本身是个服务程序,它可以在INI文件中配置调用的程序,将多个程序运行起来。MS Windows 2000 SDK工具中有个srvany,好象就是能让任一个普通程序运行为服务。  阅读全文
posted @ 2007-10-09 13:44 金庆 阅读(1436) | 评论 (4)  编辑

     摘要: C 标准库与STL的关系。STL即标准模板库(Standard Template Library),它包括五大类组件:算法、容器、迭代器、函数对象、适配器。STL是C 标准库的一部分,但不是全部。C 标准库是std名字空间中的所有内容,就是那些不带.h的头文件,如。  阅读全文
posted @ 2007-09-30 21:44 金庆 阅读(4320) | 评论 (2)  编辑

     摘要: ACE与ASIO之间关于Socket编程的比较。ASIO是基本Boost开发的异步IO库,封装了Socket,简化基于socket程序的开发。 5.事件分派处理:ACE主要是注册handler类,当事件分派时,调用其handler的虚挂勾函数。ASIO是基于函数对象的hanlder事件分派。基于ASIO开发应用,要求程序员熟悉函数对象,函数指针,熟悉boost库中的boost::bind。我个人觉得,如果应用socket编程,使用ASIO开发比较好,开发效率比较高。  阅读全文
posted @ 2007-09-21 10:27 金庆 阅读(5270) | 评论 (16)  编辑

     摘要: 最理想,最好的用模块是没有异常,保证操作如预想的结果一致。

当操作无法成功完时,必然会产生错误,或异常。
一个是返回错误码,一个是抛出异常。  阅读全文
posted @ 2007-08-13 11:43 金庆 阅读(786) | 评论 (0)  编辑

     摘要: DLLs and libraries should handle all exceptions to prevent the display of errors and warnings through Windows dialogs. DLL输出函数抛异常通常会导致程序崩溃。而且错误很难定位。应用try/except包裹所有的输出函数。输出函数的参数也要严格检查。  阅读全文
posted @ 2007-08-10 16:36 金庆 阅读(987) | 评论 (5)  编辑

     摘要: 参考firefox-2.0.0.4-source
RFC2612 3.5节Content codings, 内容编码定义了三种内容压缩方式:
gzip, compress, deflate, 但也可以注册新的压缩方式。
deflate与gzip解压的代码几乎相同,应该可以合成一块代码。  阅读全文
posted @ 2007-07-09 12:13 金庆 阅读(2208) | 评论 (0)  编辑