C++工程实践经验谈
内容一览
1 慎用匿名namespace . 2
2 不要重载全局 ::operator new() 6
3 采用有利于版本管理的代码格式 . 13
4 二进制兼容性 . . 23
5 避免使用虚函数作为库的接口 . . 28
6 动态库的接口的推荐做法 . . 36
7 以 boost::function和boost:bind 取代虚函数 . . 40
8 带符号整数的除法与余数 . . 47
9 用异或来交换变量是错误的 55
10 在单元测试中 mock 系统调用 . . 62
11 iostream 的用途与局限 67
12 值语义与数据抽象 96
13 再探 std::string . 114
14 用 STL algorithm 秒杀几道算法面试题 122
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 等处就用到了匿名
namespace。
我最近在工作中遇到并重新思考了这一问题,发现匿名 namespace 并不是多多益善。
1.1 C 语言的static 关键字的两种用法
C 语言的 static关键字有两种用途:
1. 用于函数内部修饰变量,即函数内的静态变量。这种变量的生存期长于该函数,
使得函数具有一定的“状态”。使用静态变量的函数一般是不可重入的,也不是
线程安全的,比如strtok(3)。
2. 用在文件级别(函数体之外),修饰变量或函数,表示该变量或函数只在本文件
可见,其他文件看不到也访问不到该变量或函数。专业的说法叫“具有internal
linkage”(简言之:不暴露给别的translation unit)。
C 语言的这两种用法很明确,一般也不容易混淆。

截图:



欢迎投稿 职场/创业方向. 邮箱wangfzcom(AT)163.com:王夫子社区 » C++工程实践经验谈 以工程实例来谈C++ 中文 PDF清晰版 PDF 免费下载

点评 0

评论前必须登录!

登陆 注册