c++为什么有很多的初始化方法?

答案是:让新手更容易学习c++。(天啊!)


这也造成了一个后果:在c++语言中,初始化是一个异常复杂的问题。


先说说初始化的定义:初始化就是将赋值与声明合并在一起,当对象在创建时获得了一个特定的值,我们就说这个对象被初始化了。
举一个例子,定义并初始化一个局部自动int变量(有下面四种写法):
int i = 0;
int i(0);
int j = {0};
int j{0};
使用花括号的初始化形式是c++ 11新标准引入的(称为列表初始化),以前c++使用不同的方式来初始化不同的类型,现在可以使用花括号来初始化任何类型了。

默认初始化:如果定义变量时没有指定初值,则变量被默认初始化。此时变量被赋予“默认值”。默认值到底是什么由变量的类型决定,同时定义变量的位置也会对此有影响。
值初始化:手动给出初始化值。
string *ps1 = new string;//默认初始化为空string
string *ps = new string();//值初始化为空string
int *pi1 = new int;//默认初始化;*pi的值未定义
int *pi2 = new int();//值初始化0;*pi为0

对于定义了自己的构造函数的类类型来说,要求值初始化是没有意义的;不管采用什么形式,对象都会通过默认构造函数来初始化。但对于内置类型,两种形式的差别就很大了;值初始化的内置类型对象有着良好定义的值,而默认初始化的对象的值则是未定义的。类似的,对于类中那些依赖于编译器合成的默认构造函数的内置类型成员,如果它们未在类内被初始化,那么它们的值也是未定义的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值