编程语言
首页 > 编程语言> > Effective C++读书笔记~9 杂项讨论

Effective C++读书笔记~9 杂项讨论

作者:互联网

目录

条款53:不要轻忽编译器警告

Pay attention to compiler warnings.

在C++,编译器作者通常对于将会发生的事情比程序员有更好的领悟。例如,下面的例子很常见:
程序员希望以D::f重新定义virtual B::f,但其中有个错误:B::f是const成员函数,而在D中没声明。

class B {
public:
       virtual void f() const;
};

class D : public B {
public:
       virtual void f();
};

编译器可能会警告:

warning: D::f() hides virtual B::f()

// MSVC 2017警告 /Wall
“void      D::f(void)”:      成员函数不重写任何基类虚拟成员函数
“void      B::f(void)      const”: 不重写基“B”中的虚拟成员函数;函数被隐藏

如果忽略了这个警告,可能会在f中修改数据成员,从而导致非预期行为,从而产生错误。

另外,不同的编译器有不同的警告标准。不可依赖编译器指出所有的错误。

小结

1)严肃对待编译器发出的警告信息。努力中编译器的最高警告等级下争取“无任何警告”的荣誉;
2)不要过度依赖编译器的警告能力,因为不同编译器对待事情多态度并不相同。一旦移植到另一个编译器上,原本依赖的警告信息有可能消失。

[======]

条款54:让自己熟悉包括TR1在内的标准程序库

Familiarize yourself with the standard library, including TR1.

加入TR1之前,C++98的C++标准程序库主要成分:

TR1详细叙述了14个新组件(components,即程序库技能单位),都放在std::tr1命名空间内。如shared_ptr全名是std::tr1::shared_ptr。主要的TR1组件包括:

以前,当我们想注册一个callback函数,接受一个int并返回一个string的函数作为参数,可以这样写:

void registerCallback(std::string func(int));
// 省略参数名称
void registerCallback(std::string (int));

这里“std::string (int)”是个函数签名。

而当我们有了tr1::function后,可以接受任何可调用物,只有它可以接受一个int或任何可以被转换为int的东西,并返回一个string或任何可以被转换为string的东西。

void registerCallback(std::tr1::function<std::string (int)> func);
// 参数func可以接受任何可调用物,只有其签名与“std::string (int)”一致即可

其他TR1组件划分为2组。第1组提供彼此互不相干的独立机能:

第2组TR1组件由更精巧的template编程技术(template metapromming,模板元编程)构成:

注意:TR1并未对原有组件进行修改,而是对标准库程序的纯粹添加。

TR1本身只是一份文档,为了取得其所规范的机能,还需要取得实效代码,如使用Boost程序库,或C++11以上版本提供的标准程序库。

小结

1)C++标准程序库的主要机能由STL、iostream、locale(系统区域设置,即国家或地区设置)组成,并包含C99标准程序库。
2)TR1添加了智能指针(smart_ptr,如tr1::shared_ptr)、一般化函数指针(tr1::function)、hash-based容器、正则表达式(regular expression)以及另外10个组件的支持。
2)TR1自身只是一份规范,可以Boost程序库,或C++11标准程序库。

[======]

条款55:让自己熟悉Boost

Familiarize yourself with Boost.

Boost是一个C++开发者社群,可以自由下载其程序库,网址:https://www.boost.org/
Boost是C++标准程序库的beta版本(先行者),很多实验成熟的库函数,会慢慢转移到标准程序库中。

Boost程序库要对付的主题很多,主要包括:

注意:Boost没有提供整套编程方案,如没有针对GUI开发设计的程序库,也没有连通数据块的程序库。

小结

1)Boost是一个社群,也是一个网站,提供免费、源码开放、同僚复审的C++程序库开发。
2)Boost提供许多TR1组件实现品,以及其他许多程序库。

[======]

标签:Effective,读书笔记,C++,TR1,编译器,tr1,程序库,Boost
来源: https://www.cnblogs.com/fortunely/p/15666064.html