踏雪有痕-变量初始化

来源:互联网 发布:mac 我的所有文件 编辑:程序博客网 时间:2024/04/30 08:41




如果变量在全局域中定义,那么系统会保证给它提供初始值0;
如果变量在局部域中定义或通过new表达式动态分配的,则系统不会提供初始值0。这戏对象被称为未初始化的(与他关联的内存区中含有一个随机的位串,可能是以前使用的结果)。

下面举两个例子(见注释):
1、

 using   namespace   std;

int a;   //未初始化,系统自动初始化为0
main()
{
    
int b;
           cout
<<a<<"/n"<<b<<endl;  //会出现运行期错误
}


2、
#include <string>
using   namespace   std;
string as;  //未初始化,系统自动初始化为0
main()
{
    
string bs  ;      //未初始化,运行无误,应该调用默认构造函数。
    cout<<as<<" "<<bs<<endl;  //返回两个空串
}

由此可以看出,对于有默认构造函数的类,在哪里定义都会默认调用构造函数初始化。
使用未初始化的对象是错误的,因此建议对每个对象提供一个初始值。

另外,初始化有两种形式:
  
 int a = 666;     //显式初始化
 int a(666);       //隐式初始化

需要思考一些这两种形式调用类的那种操作符???