目录
1.变量定义的基本形式
2.初始化
3.列表初始化
4.默认初始化
1.变量定义的基本形式
类型说明符(type specifier)+ 一个或多个变量名组成的列表。
其中变量名以 逗号 分隔,最后用分号结束。
还可以在定义时对变量赋初始值。
比如:
int i;
char m,n,k;
double dVar1 = 0, dVar2, dVar3 = 1;
int iVar(10);
2.初始化
当对象在创建时获得了一个特定的值,就是初始化
初始化不是赋值,初始化是变量创建时赋予其一个初始值,而赋值是把对象当前的值抹去,替换一个新的值。
C++定义了多种初始化的形式,以下语句都可以实现初始化:
int iVar = 0;
int iVar = {0};
int iVar{0};
int iVar(0);
一般而言,选择什么的初始化方式都不会太影响程序的正常运行。其中,使用 = 初始化一个变量,实际上执行的是拷贝初始化(copy initialization),编译器将等号右边的初始值拷贝到创建的对象中去。如果不使用等号,就是执行的直接初始化(direct initialization)。
注意:
当初始值只有一个时,使用直接初始化或者拷贝初始化都可以。但是如果初始化的值有多个,一般来说就只能使用直接初始化的方式。
比如:
string s(100,'a');//直接初始化//如果使用拷贝初始化:
string s = string(100,'a');
//以上代码等价于
string stemp(100.'a');
string s = stemp;
如果提供的是元素 初始值的列表,则只能把初始值都放在花括号里进行列表初始化,而不能放在圆括号里。
vector<int> vctVar{1,2,3} //正确
vector<int> vctVar(1,2,3) //错误
但是利用花括号进行初始化和默认初始化有几个需要注意的问题。
3.列表初始化
利用花括号进行初始化就是列表初始化。
当我们使用内置类型的变量时,如果初始值和变量类型不一致,且存在数据丢失的风险时,编译器将报错。
long double ldVar = 3.1415926;
int iVar{ldVar}; //错误,long double类型初始化int类型变量可能丢失数据
4.默认初始化
如果定义变量时没有指定初始值,变量就会默认初始化。
对于内置类型的变量,定义在函数体外部的变量默认初始化的值为0;而定义在函数体内部的内置类型变量将 不被初始化。函数内部一个未被初始化的内置类型变量被拷贝或者访问时会引发错误。
类的对象如果没有被显式初始化,则其值由类确定。