初始化

简介: 初始值 当对象在创建的时候获得了一个特定的值,我们说这个对象被初始化了。 注意:初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。   1 列表初始化   C++语言定义了初始化的好几种不同的形式,这也是初始化问题复杂性的一个体现。

初始值

当对象在创建的时候获得了一个特定的值,我们说这个对象被初始化了。

注意:初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。

 

1 列表初始化

 

C++语言定义了初始化的好几种不同的形式,这也是初始化问题复杂性的一个体现。例如:

int unitss_sold=0;
int units_sold={0};
int units_sold{0};
int units_sold(0);

现在,无论是初始化对象还是某些时候为对象赋新值,都可以使用这样一组由花括号括起来的初始值了。

当用于内置类型的变量时,这种初始化形式有一个重要特点:如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器将报错:

因为对于内置类型,使用初始化列表要求更严格,可能不实现强制类型转换

long double ld=3.1415926536
int a{ld},b{ld}; //错误:转换未执行,因此存在丢失信息的危险
int c(ld),d=ld; //正确:转换执行,且确实丢失了部分值
 

 

2 默认初始化

如果定义变量时没有指定初值,则变量被默认初始化,此时变量被赋予了“默认值”。默认值到底是什么由变量类型决定,同时定义变量的位置也会对此有影响。

如果是内置类型的变量未被显示初始化,它的值由定义的位置决定。定义于任何函数体之外的变量被初始化为0。然而,一种例外的情况是,定义在函数体内部的内置类型变量将不被初始化。一个未被初始化的内置类型变量的值时未定义的,如果试图拷贝或以其他形式访问此类值将引发错误。

每个类各自决定其初始化对象的方式。而且,是否允许不经初始化就定义对象也由类自己决定。如果类允许这种行为,它将决定对象的初始值到底是什么。

绝大多数类都支持无须显式初始化而定义对象,这样的类提供了一个合适的默认值,因为有默认构造函数。例如:

string empty; //empty非显示地初始化为一个空串

Sales_item item; //被默认初始化的Sales_item对象

一些类要求每个对象都显示初始化,此时如果创建了一个该类的对象而未对其做明确的初始化操作,将引发错误。

注意:定义于函数体内的内置类型的对象如果没有初始化,则其值未定义。类的对象如果没有显示初始化,则其值由类决定。

 

3 变量的声明和定义的关系

为了支持分离式编译,C++语言将声明和定义区分开来。声明使得名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对这个名字的声明。而定义负责创建与名字相关联的实体

变量声明规定了变量的类型和名字,在这一点上定义与之相同。但是除此之外,定义还申请存储空间,也可能会为变量赋一个初始值。

如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显式地初始化变量:

extern int i;   //声明i而非定义i

int j ;   //声明并定义j

任何包含了显式初始化的声明即成为定义。我们能给由extern关键字标记的变量赋一个初始值,但是这么做也就抵消了extern的作用。extern语句如果包含初始值就不再是声明,而是定义了:

extern double PI=3.1415  ;   //定义

在函数体内部,如果试图初始化一个由关键字extern标记的变量,将引发错误。

 

注意:变量能且只能被定义一次,但是可以被多次声明

 

相关文章
|
2月前
变量不初始化
变量不初始化。
26 0
|
2月前
|
索引
初始化数组
【2月更文挑战第2天】初始化数组。
14 3
|
11月前
服务器初始化
服务器初始化
指针的介绍,定义,初始化
每个变量都有自己的地址,地址也是数据,就用地址类型的变量来装,地址类型就叫做指针类型,即指针类型定义的变量就是专门装地址的。
112 0
|
JSON API 开发工具
AdonisJs项目初始化
AdonisJs项目初始化
50 0
|
资源调度 JavaScript
项目初始化
项目初始化
75 0
|
网络安全 数据安全/隐私保护
M12-2 初始化
M12-2 初始化
99 0
|
数据安全/隐私保护
|
数据库 C++
确定对象使用前已先被初始化
确定对象使用前已先被初始化
139 0
|
算法 安全 Java
深入理解 NioEventLoopGroup初始化
深入理解 NioEventLoopGroup初始化
129 0