0736171

练习7.36:下面的初始值是错误的,请找出问题所在并尝试修改它。

struct X {
    X (int i, int j): base(i), rem(base % j) { }
    int rem, base;
};

【出题思路】

本题旨在考查使用构造函数初始值列表时成员的初始化顺序,初始化顺序只与数据成员在类中出现的次序有关,而与初始值列表的顺序无关。

【解答】

在类X中,两个数据成员出现的顺序是rem在前,base在后,所以当执行X 对象的初始化操作时先初始化rem。如上述代码所示,初始化rem要用到base的 值,而此时base尚未被初始化,因此会出现错误。该过程与构造函数初始值列表中 谁出现在前面谁出现在后面没有任何关系。

修改的方法很简单,只需要把变量rem和base的次序调换即可,形式是:

struct X {
    X (int i, int j) : base (i), rem(base % j) { }
    int base, rem;
};

本页共22段,961个字符,1457 Byte(字节)