3 回答

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個贊
我純粹是猜測,但請考慮其他類型也有類似的限制:
int main()
{
const int i; // invalid
}
因此,此規(guī)則不僅是一致的,而且(遞歸地)可以防止統(tǒng)一的const(子)對象:
struct X {
int j;
};
struct A {
int i;
X x;
}
int main()
{
const A a; // a.i and a.x.j in unitialized states!
}
至于問題的另一面(允許使用默認(rèn)構(gòu)造函數(shù)的類型),我認(rèn)為這樣的想法是,具有用戶提供的默認(rèn)構(gòu)造函數(shù)的類型在構(gòu)造后應(yīng)始終處于某種合理的狀態(tài)。請注意,這些規(guī)則適用于以下情況:
struct A {
explicit
A(int i): initialized(true), i(i) {} // valued constructor
A(): initialized(false) {}
bool initialized;
int i;
};
const A a; // class invariant set up for the object
// yet we didn't pay the cost of initializing a.i
然后,也許我們可以制定一條規(guī)則,例如“必須在用戶提供的默認(rèn)構(gòu)造函數(shù)中明智地初始化至少一個成員”,但這花了太多時間來防范Murphy。C ++在某些方面傾向于信任程序員。
- 3 回答
- 0 關(guān)注
- 568 瀏覽
添加回答
舉報