您的位置:首页 > 编程语言 > C语言/C++

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

2017-08-18 22:53 232 查看
答案是:让新手更容易学习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


对于定义了自己的构造函数的类类型来说,要求值初始化是没有意义的;不管采用什么形式,对象都会通过默认构造函数来初始化。但对于内置类型,两种形式的差别就很大了;值初始化的内置类型对象有着良好定义的值,而默认初始化的对象的值则是未定义的。类似的,对于类中那些依赖于编译器合成的默认构造函数的内置类型成员,如果它们未在类内被初始化,那么它们的值也是未定义的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: