C++彻底研究之变量初始化

   使用C++语言进行程序开发时,变量的初始化贯穿于始终:数组、指针、容器、对象等等都需要初始化,没有初始化而被使用或初始化出现问题,整个程序将出现很多意想不到的错误。

   1 初始化

   初始化变量的形式有两种:赋值初始化、直接初始化。
  例如:  
int ivar(1024);           //直接初始化
int ivar = 1024;         //赋值初始化 
           
这里应该注意一点区别:初始化不是赋值。
一般情况下,直接初始化更灵活,效率更高。
   C++为了满足开发需要,对某些类型提供了多个初始化方式,其中对于类这种类型来说,多种初始化源于其本身的各种构造函数的不同。当然对于C++内置类型来说,赋值初始化与直接初始化几乎没有差别。
   由于构造函数是一种特殊的函数,它接受不同的参数,因此,根据其不同的形式,初始化的形式也有多种。
   例如:string类
string svar("c++ study");           //直接初始化
string svar = "c++ study";         //赋值初始化 
string svar(10,'c');                    //svar = "cccccccccc"
 

2 自动初始化规则

2.1 内置类型变量的初始化
   对于内置类型变量的初始化,有一条重要的规则: 在函数体外部定义的变量都自动初始化为0,在函数体内部系统不自动为其初始化
   对于最佳的实践方案是:每个内置类型的对象都要初始化
例如:
int ivar;                                  //在函数体外,ivar被默认初始化为0。
int getvar1()
{
     return ivar;             
}
 
int getvar2()
{
     int ivar2;                          //警告:在函数体内部,ivar2不能被自动初始化。
     ivar += ivar2;
     return ivar;                      //ivar将返回莫名其妙的值。
}
 
int main(int argc, char *argv[])
{
     return 0;
}
2.2 类类型变量的初始化
   如果定义某个类时,如果没有提供初始化方式,则会调用默认构造函数对其进行初始化。
由于其本身的性质原因,当类对象被定义时,不管在函数体内部还是外部,默认构造函数都将被调用。
   大多数类都提供了默认构造函数。如果某些类没有提供默认构造函数,那么,每个定义都必须提供显示的初始化形式
例如:
string svar;                                  //在函数体外,svar被默认初始化为""。
void getvar()
{
       string svar2;                         //在函数体内部,svar2同样被默认初始化为""
       svar = svar2;          
}
 
int main(int argc, char *argv[])
{
     return 0;
}
        
 
   数组、指针、容器、对象以及const和static的初始化要到各自的章节才具体介绍,不过,大体的初始化规则还是一致的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值