天天看点

C++中的初始化C++中的初始化

C++中的初始化

初始化不是赋值,初始化的含义是:创建变量时赋予其一个初值,而赋值的含义是把

对象的达当前值擦除,并以一个新的值来代替。

1.默认初始化

如果定义变量时没有指定初始值,则变量被默认初始化,此时变量被赋予一个默认值,

默认值到底是什么有变量的类型决定,同时定义变量的位置也会对默认初始化有影响。

如果是内置类型的变量未被显示初始化,它的值有定义位置决定。定义于任何函数之

外的变量被初始化为0。定义在函数体内部的内置变量将不被初始化,若果试图拷贝或

以其他方式访问此类型的变量将引发错误。

int a, b; //全局变量a和b,有默认值0
int main()
{
    int a; //局部变量a,没有默认值
    a = a+1; //错误,没有初始化a就使用了a的值
} 
           

2.拷贝初始化与直接初始化

拷贝初始化又叫复制初始化。如果使用等号(=)初始化一个变量,实际执行的是拷贝

初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去。与之相反,则执行的是

直接初始化。

string s5 = "hiya";  // 拷贝初始化
string s6("hiya");  // 直接初始化
string s7(10, 'c');  // 直接初始化,s7的内容是 cccccccccc
           

拷贝初始化通常是有拷贝构造函数来完成的。但是,如果一个类有移动构造函数,则拷贝

初始化有时会使用移动构造函数而非拷贝构造函数来完成。拷贝初始化不仅仅在使用显示

的等号(=)时才发生,下列情况也会发生:

1)将一个对象作为实参传递给一个非引用类型的形参

2)从一个返回类型为非引用类型的函数返回一个对象

3)用花括号列表初始化一个数组中的元素或一个聚合类中的成员

继续阅读