首页 理论教育 C++STL标准模板库:数值极限及应用

C++STL标准模板库:数值极限及应用

时间:2023-10-25 理论教育 版权反馈
【摘要】:通常,数值型别的极值是与平台相关的特性。C++标准程序库通过template numeric_lim-its提供极值,取代了传统C语言所采用的预处理器常数。整数常数定义于<climits>和<limit.h>中,浮点常数定义于<cfloat>和<float.h>中。如果能够注意并运用该极值,较容易写出与平台无关的程序。1)通用性的模板为型别提供默认极值。著者能力有限,敬请广大读者批评指正。例9-7例9-7的执行结果为:程序执行结果的最后一行表示型别string没有定义数值极限,因为string并非数值型别。

C++STL标准模板库:数值极限及应用

通常,数值型别的极值是与平台相关的特性。C++标准程序库通过template numeric_lim-its提供极值,取代了传统C语言所采用的预处理器常数。整数常数定义于<climits>和<limit.h>中,浮点常数定义于<cfloat>和<float.h>中。极值的概念有两个优点:①提供了较好的型别安全性;②程序员可借此自定义模板来核定极值。

C++标准中规定了各种型别必须保证的最小精度。如果能够注意并运用该极值,较容易写出与平台无关的程序。各种数据类型的最小长度见表9-6。

9-6 各种类型的内存长度

978-7-111-51399-5-Chapter09-60.jpg

STL提供了类模板class numeric_limits<>。使用模板通常是为了对所有型别给出通用解决方案。此外,在必要时使用模板template为每个型别提供共同的接口。STL不仅提供通用的模板template,还提供其特化(Specialization)板本。类模板numeric_limits即是该技术的典型例子。

1)通用性的模板(template)为型别提供默认极值。

978-7-111-51399-5-Chapter09-61.jpg

通用性template将成员is_specialized设置为false。对型别T而言,无所谓极值的存在。

2)各具体型别的极值由特化版本(Specialization)提供。

978-7-111-51399-5-Chapter09-62.jpg

978-7-111-51399-5-Chapter09-63.jpg

通常is_specialized设置为true,所有其他成员都根据特定型别的具体极值加以设定。通用性的类模板numeric_limits及其特化版本均放在头文件<limits>中。C++ STL的特化版本涵盖了所有数据基本型别:

978-7-111-51399-5-Chapter09-64.jpg

模板类numeric_limits的所有成员及其意义见表9-7。其中第三列对应相应的C常数,这些常数包含在头文件<climits>、<limits.h>、<cfloat>和<float.h>中。(www.xing528.com)

9-7 模板类numeric_limits的成员说明

978-7-111-51399-5-Chapter09-65.jpg

(续)

978-7-111-51399-5-Chapter09-66.jpg

注:表格中“意义”一栏中的诸多解释可能会有不合理之处。著者能力有限,敬请广大读者批评指正。

下面介绍一个简单的实例(摘自《C++标准程序库》)。

例9-7

978-7-111-51399-5-Chapter09-67.jpg

978-7-111-51399-5-Chapter09-68.jpg

例9-7的执行结果为:

978-7-111-51399-5-Chapter09-69.jpg

程序执行结果的最后一行表示型别string没有定义数值极限,因为string并非数值型别。对任何型别可以进行询问:是否定义了极值。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈