|
发表于 2006-10-24 12:13:59
|
显示全部楼层
写这代码的人大概就想说一句话,"我就是NB,我故意玩死你!"
A(int f, int l):first(f), last(l),size(first - last)
你知道他们的初始化顺序是如何吗?
如果你用gcc 3.4及以上版本编译,这样的代码一定会给一个warning,不知道你注意没有?
上面的朋友已经说过了,类成员初始化的顺序是按它被 "声明" 的顺序来的....
而你在构造函数中写的顺序与类成员被声明的顺序不同,所以最后的结果是不确定的。
有一条原则,如果类的构造函数的初始化成员列表中的某个成员变量的初始化需要用到该类的其他非静态成员变量。那么这个成员变量不应该被写在初始化成员列表中。
例如
A(int f, int l):first(f), last(l){
size=first - last;
}
就万事大吉了。 |
|