Skip to Content
C++程序设计:原理与实践(基础篇)(原书第2版)
book

C++程序设计:原理与实践(基础篇)(原书第2版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
Pearson
Content preview from C++程序设计:原理与实践(基础篇)(原书第2版)

5.6.4 窄化错误

在3.9.2节中,我们曾看过一个令人讨厌的错误:当我们给一个变量赋了一个“太大”的值后,这个值会被截断。例如:

这里x的值是2而不是2.9,因为x是整型,而整型没有小数部分,只有整数部分(这是显然的)。与之类似,如果我们使用ASCII字符集,c的值将是42(表示字符*),而不是1066,因为字符集中没有值为1066的字符。

在3.9.2节中,我们已经看到如何通过测试来确保截断错误不发生。有了异常(和模板,参见14.3节),我们可以编写函数来测试能够引起值改变的赋值或初始化操作,有错误发生时,抛出runtime_error异常。例如:

这里<…>的用法与vector<int>中的尖括号相同。当需要确定一个类型而不是数值时,我们可以这样使用。它被称为模板参数(template parameter)。当需要进行类型转换,而不确定数值“是否适合”目标类型时,我们可以使用narrow_cast。它是在std_lib_facilities.h中定义并用error()实现的。单词cast的意思是“类型转换”,它暗示进行转换的对象是有问题的(就像对一条断腿固定石膏模一样)。需要注意的是,类型转换并不会改变操作数,而是生成了一个所要求类型的新数值。

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
Go程序设计语言

Go程序设计语言

艾伦A. A.多诺万, 布莱恩W. 柯尼汉

Publisher Resources

ISBN: 9787111562252