C++中变量初始化整理

小女纸研究生一枚,虽本科学的就是计算机,但是基本是糊里糊涂的过来了,对于计算机没有什么兴趣。不小心去上了研究生,继续学的计算机,方向是目标跟踪与计算机视觉。开始想真正的我自己努力一回,遂从看C++primer开始,但是在学习的过程中,因水平有限,很多方面都搞糊涂了,所以将自己的一些困惑的东西做一些整理,还希望大家能够多提宝贵意见,这也是我的一篇博客,我会痛并坚持着,并快乐着。奋斗

自动对象

      在看函数基础中的局部对象的时候,看到自动对象的时候发现自己虽然前面看过了很多变量的初始化,但是还是很模糊。

      自动对象是只存在于块执行过程中的变量,例如函数的形参。在函数调用的过程中,我们用传递的实参来初始化形参对应的自动对象。对于局部变量对应的自动对象来说,有这样两种初始化的方式:1.用变量自身的初始化值来初始化;2.对于本身没有含有初始化值的变量来说,就执行默认初始化

默认初始化(定义的变量没有指定初值的时候,将执行默认初始化。)

1.内置类型:当其没有被显示初始化的时候,它的值将有其的位置决定:

1)变量在任何的函数体外的时候,变量会被初始化为0;

2)变量在函数体内的时候,变量将不被初始化。(此时,内置类型的置未定义

2.绝大数类都支持不用显示初始化,这样的类会提供一个合适的默认值。例如:string类型如果没有显示初始化,则会生成一个空串。

局部静态对象:将局部变量定义成static则该变量就不会随着函数的执行完成而被销毁。

        如果局部静态对象没有被显示初始化,则将执行值初始化。

值初始化(对于vector中的元素,可以只有数量,此时库会创建一个值初始化的元素初值,赋给所有的元素

1)元素是内置类型,自动设为0;

2)元素是类类型,则由类决定;

注意:1)要给明确要求提供初始值的类提供初值,否则无法完成初始化。

           2)只提供元素的数量没有值的,只能使用直接初始化。

直接初始化:不使用等号(=)号初始化,例如用()和{},执行的就是直接初始化

拷贝初始化:使用等号初始化变量,执行的是拷贝初始化

列表初始化:用花括号来初始化变量

注意:1)拷贝初始化只能提供一个初始值;

   2)类内初始值,只能使用拷贝初始化或者列表初始化;

   3)对于提供的初始值的列表,只能将初始值放在{},不能放在();

引用相当于给另外一个对象起的别名,所以必须初始化;

指针在定义的时候不一定要赋值,但是跟内置类型一样,如果定义在函数体内的指针未初始化,则将出现未定义。

类内初始值初始化数据成员时必须用{}或者=,不能用(),对于没有初始值的成员会执行默认初始化。

对于string类型,可以默认初始化,得到一个空串,也可以用拷贝初始化或者直接初始化。

对于vector类型,可以默认初始化,得到一个空vector,也可以用拷贝初始化、列表初始化、值初始化。



看的进度和水平有限,只能整理这么多了,求宝贵的意见,我会虚心接受并改正,大神勿喷。

参考书籍《C++primer》第五版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值