九. 杂项讨论
53. 不用轻忽编译器的警告
请记住:
- 严肃对待编译器发出的警告信息。努力在你的编译器的最高(最严苛)警告级别下争取“无任何警告”的荣誉。
- 不要过度倚赖编译器的报警能力,因为不同的编译器对待事情的态度并不相同。一旦移植到另一个编译器上,你原本倚赖的警告信息有可能消失。
解释:
-
严肃对待编译器发出的警告信息:编译器的警告信息旨在提醒开发者代码的某些地方可能存在问题,如潜在的内存泄漏、未使用的变量、过时的函数等,这些问题可能会导致程序在运行时产生未定义行为,所以对待这些警告应该认真处理,而不是简单地忽视。
-
努力在你的编译器的最高(最严苛)警告级别下争取无任何警告的荣誉:这句话的意思是建议在编写代码的时候,尽可能在编译器的最高警告级别下编写出无警告的代码,这样可以尽早发现和修复程序中的问题,提高代码质量。
-
不要过度依赖编译器的报警能力:虽然编译器的警告信息能帮助我们发现一些问题,但是不同的编译器其报警的规则和标准可能会有所不同,并不能找出所有的错误。很有可能在一个编译器下没有警告的代码,在另一个编译器下就可能出现警告,这种情况在跨平台开发时尤为常见。
所以,良好的习惯是写出清晰、规范的代码,不应过度依赖于编译器警告,而应积极预防可能的问题,提高代码的健壮性和可移植性。
54. 让自己熟悉包括TR1在内的标准程序库
请记住:
- C++标准程序库的主要机能由STL、iostreams、locales组成。并包含C99标准程序库。
- TR1添加了智能指针(例如tr1::shared_ptr)、一般化函数指针(tr1::function)、hash-based容器、正则表达式以及另外10个组件支持。
- TR1自身只是一份规范。为获得TR1提供的好处,你需要一份实物。一个好的实物来源是Boost。
解释:
-
C++标准程序库的主要机能由STL、iostreams、locales组成:这里讲的是C++标准库的主要组成部分。STL(Standard Template Library)是C++标准模板库,包含了一系列模板类和函数,用于常见的数据结构和算法,如向量、列表、队列、栈等。iostreams提供了进行输入/输出操作的函数和对象,例如cin、cout。而locales则提供了关于国际化和本地化的支持。
-
并包含C99标准程序库:这说明C++标准库包含了在C99标准中定义的所有库,这使得C++程序员可以方便地使用一系列基础和高级的C功能。
-
TR1添加了智能指针(例如tr1::shared_ptr)、一般化函数指针(tr1::function)、hash-based容器、正则表达式以及另外10个组件支持:TR1是在C++03标准之后添加的一次重大扩展,提供了很多新的便利功能。包括智能指针(自动管理内存的对象)、一般化的函数指针(可以保存任何形式的可调用对象的对象)、基于哈希的数据结构(如unordered_map或unordered_set)以及正则表达式(用于文本模式匹配)等。
-
TR1自身只是一份规范:这句话的意思是,TR1只是一个技术报告,定义了语言应有的特性,但它本身并不包含任何可以运行的代码。
-
为获得TR1提供的好处,你需要一份实物:这指的是你需要一个包含TR1定义内容的库实现,才能在编程中利用到TR1的功能。
-
一个好的实物来源是Boost:Boost是一个非常知名的C++库集合,包括了大量用于解决常见问题的库。其中就包含了TR1规范中的很多特性,所以它是使用TR1功能的一个很好的选择。
上面这句话主要是在讲解C++的一个技术报告(Technical Report 1,简称TR1)是如何被实现以及如何利用的。
-
TR1自身只是一份规范:这表明TR1并不是一个可以直接使用的软件或者代码,而是一份关于C++语言扩展的技术标准或规范,规定了一些新的特性和功能应该如何表现。
-
为获得TR1提供的好处,你需要一份实物:这里的"实物"指的是实现了TR1规范的代码库。虽然TR1定义了一系列的功能和接口,但是你只可能利用到它们当有人或者组织采纳这一规范,并在其代码库中提供了实现时。之所以需要实现,是因为规范只是一种规定,规定了功能应该如何工作,但是并没有具体的代码,需要开发人员根据规范编写具体的代码实现。
-
一个好的实物来源是Boost:Boost是C++中表现杰出的一个开源库,实现了许多C++的高级特性,包括TR1中的许多功能。这句话是建议说,如果你想在代码中使用TR1规定的特性,可以选择使用Boost库,因为Boost库针对这些特性,提供了良好的实现。
55. 让自己熟悉Boost
请记住:
- Boost是一个社群,也是一个网站。致力于免费、源码开放、同僚复审的C++程序库开发。Boost在C++标准化过程中扮演深具影响力的角色。
- Boost提供许多TR1组件实现品,以及其他许多程序库。