August 2021
Intermediate to advanced
450 pages
5h 35m
Chinese
在使用对象之前,必须给它赋予一个值。C++提供了多种表达初始化的符号,如前面用到的=,以及一种更通用的形式——花括号限界的初始值列表:
=初始化是一种比较传统的形式,可追溯到C语言,但如果你心存疑虑,那么还是使用通用的{}列表形式。抛开其他不谈,这至少可以令你避免在类型转换中丢失信息:
不幸的是,丢失信息的类型转换,即收缩转换(narrowing conversion),如double转换为int及int转换为char,在C++中是允许的,而且是隐式应用的。隐式收缩转换带来的问题是为了与C语言兼容而付出的代价(参见16.3节)。
我们不可以漏掉常量(参见1.6节)初始化,变量也只有在极其罕见的情况下可以不初始化。也就是说,在引入一个名字时,你应该已经为它准备好了一个合适的值。用户自定义类型(如string、vector、Matrix、Motor_controller和Orc_warrior)可以定义为隐式初始化方式(参见4.2.1节)。
在定义一个变量时,如果它的类型可以由初始值推断得到,则你无须显式指定:
当使用auto时,我们倾向于使用=初始化,因为其中不会涉及带来潜在麻烦的类型转换,但如果你喜欢始终使用{}初始化,也是可以的。
当没有特殊理由需要显式指定数据类型时,一般使用auto。在这里,“特殊理由”包括: ...
Read now
Unlock full access