现在的位置: 首页 > 综合 > 正文

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

2013年06月29日 ⁄ 综合 ⁄ 共 807字 ⁄ 字号 评论关闭

 

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];
然而,一旦有构造函数而没有缺省构造函数,上面的对象定义就会产生一个编译错误。
我们可能会想,缺省构造函数应该可以做一些智能化的初始化工作,比如把对象的所有内存置零。但事实并非如此。因为这样会增加额外的负担,而且使程序员无法控制。
 

抱歉!评论已关闭.