在C++中,初始化是一个异常复杂的问题,很多人认为初始化是赋值的一种,事实上,初始化和赋值是两个完全不同的操作。
列表初始化
要定义一个名为haif的int变量并初始化为0,以下4条语句都可以做到。
int haif = 0;
int haif = {0};
int haif{0};
int haif(0);
作为C++11标准的一部分,用花括号来初始化变量得到了全面应用,我们将这种用花括号的初始化方式称为列表初始化
列表初始化特点
如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器将报错。
#include <iostream>
using namespace std;
int main()
{long double ans = 3.1415926536;int a{ans},b{ans};return 0;
}
而我们如果不使用列表初始化,编译器就不会报错,而且发生了数据丢失。
不过上面的都无关紧要,因为我们不会故意用long double的值去初始化int变量
默认初始化
如果定义变量时没有指定初值,则变量被默认初始化,此时变量会被赋予“默认值”。
如果是定义于任何函数外的变量(全局变量),则会被初始化为0
定义在函数体内部的变量将不被初始化,我们可以看到此时a[2]是一堆乱码。
如果试图拷贝或者以其他形式访问此类值将引发错误。
note:
定义于函数体内的内置类型的对象如果没有初始化,则其值未定义。类的对象如果没有显式地初始化,则其值由类确定。
小建议:
建议初始化每一个内置类型的变量。