thinking in c++ 读书笔记---集合初始化

 
int b[6]={0};这种方式定义并初始化一个数组,编译器会把第一个初始化值赋给数组的第一个元素,然后用0赋给其余的元素。注意,如果我们定义了一个数组而没有给出一列初始值时,编译器并不会去做这些工作。所以上面的表达式是将一个数组初始化为零的简洁方法,它不需要用一个f o r循环,也避免了“偏移1位”错误(它可能比f o r循环更有效,这依赖于编译器)。
对象的集合初始化:
首先看一下c风格的struct集合初始化方法,C风格的s t r u c t的所有成员都是公共型的,所以它们的值可以直接指定:
struct X {
 int i;
 float f;
 char c;
} ;
X x1 = {1,2.2,'c' };
如果我们有一个这种s t r u c t的数组,我们也可以用嵌套的大括号来初始化每一个对象。
X x2[3] = {{1,1.1, 'a'},{2,2.2, 'b'}};
这里,第三个对象被初始化为零。
c++中,类有构造函数,构造函数必需被调用完成初始化:因此,如果有一个下面的s t r u c t类型:
struct Y {
 float f;
 int i;
 Y(int A); // presumably assigned to i
} ;
我们必须指示构造函数调用,最好的方法像下面这样:
Y y2[] = {Y(1),Y(2),Y(3)};
但是在本例中,下面一个语句是错误的:Y y3[3];
上面的语句需要一个没有参数的缺省的构造函数.缺省的构造函数是如此重要,所以在一个构造类型( struct 或c l a s s)中没有构造函数时,编译器会自动创建一个。因此下面例子将会正常运行:
class Z {
 int i; // private
}; // no constructor
Z z,z2[10];
然而,一旦有构造函数而没有缺省构造函数,上面的对象定义就会产生一个编译错误。
我们可能会想,缺省构造函数应该可以做一些智能化的初始化工作,比如把对象的所有内存置零。但事实并非如此。因为这样会增加额外的负担,而且使程序员无法控制。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值