C++工程实践经验谈.pdf版
3509 点击·0 回帖
![]() | ![]() | |
![]() | ![]() 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:tring . 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 语言的这两种用法很明确,一般也不容易混淆。 资源: 115网盘附件下载: C++工程实践经验谈.pdf版.rar (933.86KB) | |
![]() | ![]() |