C++变量初始化规则

当我们定义一个没有初始化式的变量时,系统有时候会帮我们初始化变量,有时候又不会帮我们初始化变量。这主要取决于三点:(1)变量的类型;(2)变量的位置;(3)特殊的关键字。

1、  内置类型变量的初始化

内置类型是指C++语言本身定义的基本数据类型,如int、double、bool、char等,这些内置类型变量是否自动初始化取决于变量定义的位置。在函数体外定义的变量(即全局变量)都初始化为0,在函数体里定义的变量(即局部变量)不自动进行初始化。实际上,未初始化的变量事实上都有一个值,它会随机把该变量放到内存中的某个位置,编译器会把这个位置中的值当成一个合法的值去做相关的运算,而这种错误是我们很难发现的,往往会导致程序错误执行。

上面说的应该不难理解,有趣的是我在VS2010上验证上面的说法时,发现全局变量确实会初始化为0,但是局部变量却不是一个随机值,而是一个固定值-858993460(0xcccccccc)。后来上网查了一下后发现,在VC Debug版本里,栈中分配的值都会先用0xCCCCCCCC来处理一下,所以大家在Debug模式下调试程序发现在引用0xCCCCCCCC这样的值,就说明在试图使用一个没有初始化的值。DEBUG版本为了能让程序员更早的发现错误,把堆栈上的数据对初始化成了0xCCCCCCCC,也就是说局部变量如果不初始化,那么DEBUG版本中就会是0xCCCCCCCC,从而容易发现未初始化的错误。如果想详细了解VC中的0xCCCCCCCC可以参考下面的网址

http://qiusuoge.com/8291.html

2、  类类型变量的初始化

每个类都定义了该类型的对象可以怎样初始化。类可以通过定义一个或多个构造函数来控制类对象的初始化。如果定义某个类的变量时没有提供初始化式,这个类也可以定义初始化时的操作。它是通过一个特殊的构造函数即默认构造函数来实现的。这个构造函数之所以被称作默认构造函数,是因为它是“默认”运行的。如果没有提供初始化式,那么就会使用默认构造函数。不管变量在哪里定义(无论是全局变量还是局部变量),默认构造函数都会被使用。

大多数类都提供了默认构造函数。如果类具有默认构造函数,那么就可以在定义该类的变量时不用显示地初始化变量。例如,string类定义了默认构造函数来初始化string变量为空字符串,即没有字符的字符串:

string empty;//empty是一个空串:empty=“”

有些类类型没有默认构造函数。对于这些类型来说,每个定义都必须提供显示的初始化式。没有初始值是根本不能定义这种数据类型的变量的。

3、  特殊的关键字

对于使用static关键字修饰的内置类型变量,不管变量在哪里定义(无论是全局变量还是局部变量),都会像全局变量一样初始化为0。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值