9. 杂项讨论
条款 53:不要轻忽编译器警告
许多程序员习惯性地忽略编译器警告。他们认为,毕竟,如果问题很严重,编译器应该给一个错误信息而非警告信息,不是吗?
一旦从某个特定编译器的警告信息获得经验,你将学会了解,不同的信息意味什么 —— 那往往和它们“看起来”的意义十分不同!尽管一般认为,写出一个在最高警告级别下也无任何警告信息的程序最是理想,然而一旦有了上述的经验和对警告信息的深刻理解,你倒是可以选择忽略某些警告信息。不管怎样说,在你打发某个警告信息之前,请确定你了解它意图说出的精确意义。这很重要。
记住,警告信息天生和编译器相依,不同的编译器有不同的警告标准。所以草率编程然后依赖编译器为你指出错误,并不可取。
请记住:
- 严肃对待编译器发出的警告信息。努力在你的编译器的最高警告级别下争取“无任何警告”的荣誉。
- 不要过度依赖编译器的报警能力,因为不同的编译器对待事情的态度并不相同。一旦移植到另一个编译器上,你原本依赖的警告信息有可能消失。
条款 54:让自己熟悉包括 TR1 在内的标准
C++98 列入的 C++ 新标准程序库主要成分有:
- STL,覆盖容器、迭代器、算法、函数对象、各种容器适配器和函数对象适配器。
- iostream,覆盖用户自定义缓冲功能、国家化 I/O 以及预先定义好的对象 cin、cout、cerr 和 clog。
- 国际化支持,包括多区域能力。想 wchar_t 和 wstring 等类型都对促进 Unicode 有所帮助。
- 数值处理,包括复数模板和纯数值数组。
- 异常阶层体系,包括 base class exception 以及 derived class logic_error 和 runtime_error,以及更深继承的各个 class。
- C89 标准程序库。
TR1 详细叙述了 14 个新组件,统统都放在 std 命名空间,更正确地说是在其嵌套命名空间 tr1 内。TR1 组件有:
- 智能指针;
- tr1::function;
- tr1::bind;
- Hash table;
- 正则表达式;
- Tuple;
- tr1::array;
- tr1::mem_fn;
- tr1::reference_wrapper;
- 随机数生成工具;
- 数学特殊函数;
- C99 兼容扩充;
- Type trait;
- tr1::result_of。
请记住:
- C++ 标准程序库的主要机能是由STL、iostreams、locales 组成。并包含 C99 标准程序库。
- TR1 添加了智能指针(例如 tr1::shared_ptr)、一般化函数指针(tr1::function)、hash-based 容器、正则表达式)以及另外 10 个组件的支持。
- TR1 自身只是一份规范。为获得 TR1 提供的好处,你需要一份实物。一个好的实物来源是 Boost。
条款 55:让自己熟悉 Boost
Boost 是一个 C++ 开发者集结的社群,也是一个可自由下载的 C++ 程序库群,它的网址是 https://boost.org 。
请记住:
- Boost是一个社群,也是一个网站。致力于免费、源码开发、同僚复审的 C++ 程序库开发。Boost 在 C++ 标准化过程过程中扮演深具影响力的角色。
- Boost 提供许多 TR1 组件实现品,以及其他许多程序库。