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版)

12.4.4 初始化

一如以往,我们必须要保证在使用对象之前为它赋一个值;也就是说,我们希望确保指针被初始化,并且指向的对象也被初始化。考虑下面代码:

显然,声明p0但没有对它进行初始化会带来麻烦。考虑下面代码:

这行代码将7.0赋给内存中的某个位置,但我们并不知道将会是哪部分内存。这个赋值可能是无害的,但是永远也不要这样做。我们迟早会得到与越界访问相同的结果:“我的程序神秘崩溃”或“我的程序得到错误的输出”。对于老式C++程序(“C风格程序”),大多数严重错误是由未初始化指针的访问或越界的访问而引起。我们必须尽最大努力去避免这种访问,部分原因是着眼于专业化,部分原因是我们不想浪费时间查找这种错误。很少有事情像查找这种错误一样令人沮丧和厌倦。避免错误而不是查找它更令人愉快和有效率。

对于内置类型,使用new分配的内存不会被初始化。如果想初始化单个对象,你可指定一个值,就像我们对p2所做的:*p2=5.5。注意{}初始化语法。它与[]相对,后者表示“数组”。

对new分配的对象数组,我们可以指定一个初始化器列表。例如:

现在,p4指向5个double类型的变量,它们的值为0.0、1.0、2.0、3.0和4.0。p5也是如此;如果提供了一组元素作为初始值,我们可以省略元素数目。

像往常一样,我们应该小心未初始化的对象,确保在读取它们之前已为它们赋值。注意,编译器通常有一个“调试模式”,每个变量被默认初始化为一个预期值(通常为0)。这意味着当关闭调试模式并发布一个程序时、当用优化器优化程序时或者只是在不同机器上编译时,带有未初始化变量的程序可能突然有不同的运行结果。不要陷入未初始化变量的麻烦中。 ...

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