C++ 工程实践
文章平均质量分 75
陈硕
@bnu_chenshuo
展开
-
C++ 工程实践(3):采用有利于版本管理的代码格式
版本管理(version controlling)是每个程序员的基本技能,C++ 程序员也不例外。版本管理的基本功能之一是追踪代码变化,让你能清楚地知道代码是如何一步步变成现在的这个样子,以及每次 check-in 都具体改动了哪些内部。所谓“有利于版本管理”的代码格式,就是指在代码中合理使用换行符,对 diff 工具友好,让 diff 的结果清晰明了地表达代码的改动。原创 2011-03-05 15:16:00 · 15464 阅读 · 24 评论 -
为什么多线程读写 shared_ptr 要加锁?
为什么多线程读写 shared_ptr 要加锁?陈硕(giantchen_AT_gmail_DOT_com)2012-01-28最新版下载:http://chenshuo.googlecode.com/files/CppEngineering.pdf我在《Linux 多线程服务端编程:使用 muduo C++ 网络库》第 1.9 节“再论 shared_ptr 的线程安全”中写道:(shared_原创 2013-01-28 05:13:55 · 98196 阅读 · 55 评论 -
关于 std::set/std::map 的几个为什么
陈硕 (chenshuo.com)2013-01-20std::set/std::map (以下用 std::map 代表) 是常用的关联式容器,也是 ADT(抽象数据类型)。也就是说,其接口(不是 OO 意义下的 interface)不仅规定了操作的功能,还规定了操作的复杂度(代价/cost)。例如 set::insert(iterator first, iterator last) 在通常情况原创 2013-01-20 13:22:53 · 59880 阅读 · 9 评论 -
《Linux 多线程服务端编程:使用 muduo C++ 网络库》网上书店订购
《Linux 多线程服务端编程:使用 muduo C++ 网络库》网上书店订购内容简介本书主要讲述采用现代 C++ 在 x86-64 Linux 上编写多线程 TCP 网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即 one loop per thread。这是在 Linux 下以 native 语言编写用户态高性能网络程序最成熟的模式,掌握之后可顺利地开发各类常见的原创 2013-01-11 12:43:50 · 64207 阅读 · 170 评论 -
新书预告:《Linux 多线程服务端编程:使用 muduo C++ 网络库》
看完了 W. Richard Stevens 的传世经典《UNIX 网络编程》, 能照着例子用 Sockets API 编写 echo 服务, 却仍然对稍微复杂一点的网络编程任务感到无从下手? 书中示例代码把业务逻辑和 Sockets 调用混在一起,似乎不利于将来扩展?网络编程中的遇到一些具体问题该怎么办?例如程序在本机测试正常,放到网络运行上就经常出现数据收不全的情况?TCP 协议真的有所谓的“原创 2012-09-21 07:11:15 · 48126 阅读 · 16 评论 -
C++ 工程实践(12):C++ 编译链接模型精要
《C++ 工程实践》新增第15节“C++ 编译链接模型精要” PDF 下载: https://github.com/downloads/chenshuo/documents/CppPractice.pdf原创 2012-04-20 08:18:46 · 21029 阅读 · 0 评论 -
C++ 工程实践(10):再探std::string
本文总结了std::string的三种常见实现方式。全文见 https://github.com/downloads/chenshuo/documents/CppPractice.pdf 第13节。原创 2012-03-17 16:29:55 · 17421 阅读 · 0 评论 -
C++ 工程实践(11):用 STL algorithm 秒杀几道算法面试题
《C++ 工程实践》新增第14节“用 STL algorithm 秒杀几道算法面试题” PDF 下载: https://github.com/downloads/chenshuo/documents/CppPractice.pdf原创 2012-04-01 10:01:26 · 23476 阅读 · 4 评论 -
C++ 工程实践(9):数据抽象
陈硕 (giantchen_AT_gmail)http://blog.csdn.net/Solstice http://weibo.com/giantchen陈硕关于 C++ 工程实践的系列文章: http://blog.csdn.net/Solstice/category/8原创 2011-08-22 00:20:40 · 19221 阅读 · 4 评论 -
C++ 工程实践(8):值语义
陈硕 (giantchen_AT_gmail)http://blog.csdn.net/Solstice http://weibo.com/giantchen陈硕关于 C++ 工程实践的系列文章: http://blog.csdn.net/Solstice/category/8原创 2011-08-16 21:16:23 · 16695 阅读 · 3 评论 -
C++ 工程实践(7):iostream 的用途与局限
C++ 工程实践(7):iostream 的用途与局限陈硕 (giantchen_AT_gmail)http://blog.csdn.net/Solstice http://weibo.com/giantchen陈硕关于 C++ 工程实践的系列文章: ht原创 2011-07-17 15:08:54 · 34152 阅读 · 33 评论 -
C++ 工程实践(6):单元测试如何 mock 系统调用
本文讨论了在编写单元测试时 mock 系统调用(以及其他第三方库)的几种做法。原创 2011-05-16 00:20:00 · 26895 阅读 · 7 评论 -
C++ 工程实践(5):避免使用虚函数作为库的接口
摘要:作为 C++ 动态库的作者,应当避免使用虚函数作为库的接口。这么做会给保持二进制兼容性带来很大麻烦,不得不增加很多不必要的 interfaces,最终重蹈 COM 的覆辙。 本文主要讨论 Linux x86 平台,会继续举 Windows/COM 作为反面教材。 本文是上一篇《C++ 工程实践(4):二进制兼容性》的延续,在写这篇文章的时候,我原本以外大家都对“以虚函数作为接口”的害处达成共识,我就写得比较简略,看来情况不是这样,我还得展开谈一谈。原创 2011-03-12 22:01:00 · 25750 阅读 · 110 评论 -
C++ 工程实践(2):不要重载全局 ::operator new()
对于现实生活中的 C++ 项目,重载 ::operator new() 几乎没有用武之地,因为很难处理好与程序所用的 C++ library 的关系。如果确实需要,我们可以从 malloc 层面入手,彻底而全面地替换内存分配器。原创 2011-02-22 01:23:00 · 20372 阅读 · 28 评论 -
C++ 工程实践(4):二进制兼容性
陈硕 (giantchen_AT_gmail) Blog.csdn.net/Solstice 本文主要讨论 Linux x86/x86-64 平台,偶尔会举 Windows 作为反面教材。 C/C++ 的二进制兼容性 (binary compatibility) 有多重含义,本文主要在“头文件和库文件分别升级,可执行文件是否受影响”这个意义下讨论,我称之为 library (主要是 shared library,即动态链接库)的 ABI (application binary interface)。原创 2011-03-09 10:46:00 · 29707 阅读 · 63 评论 -
C++ 工程实践(1):慎用匿名 namespace
匿名 namespace (anonymous namespace 或称 unnamed namespace) 是 C++ 的一项非常有用的功能,其主要目的是让该 namespace 中的成员(变量或函数)具有独一无二的全局名称,避免名字碰撞 (name collisions)。一般在编写 .cpp 文件时,如果需要写一些小的 helper 函数,我们常常会放到匿名 namespace 里。muduo 0.1.7 中的 muduo/base/Date.cc 和 muduo/base/Thread.cc 等处原创 2011-02-15 22:56:00 · 36885 阅读 · 58 评论 -
C++面试中string类的一种正确简明的写法
本文首发于酷壳网 http://coolshell.cn/articles/10478.html先说说程序员(应届生)面试的一般过程,一轮面试(面对一到两个面试官)一般是四、五十分钟,面试官会问两三个编程问题(通常是两大一小),因此留给每个编程题的时间只有 20 分钟。这 20 分钟不光是写代码,还要跟面试官讨论你的答案并解答提问,比如面试官拿过你的答案纸,问某一行代码如果修改会有什么后果。因此真原创 2013-10-11 11:08:50 · 46682 阅读 · 9 评论