3 回答

TA貢獻1847條經驗 獲得超7個贊
我純粹是猜測,但請考慮其他類型也有類似的限制:
int main()
{
const int i; // invalid
}
因此,此規則不僅是一致的,而且(遞歸地)可以防止統一的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!
}
至于問題的另一面(允許使用默認構造函數的類型),我認為這樣的想法是,具有用戶提供的默認構造函數的類型在構造后應始終處于某種合理的狀態。請注意,這些規則適用于以下情況:
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
然后,也許我們可以制定一條規則,例如“必須在用戶提供的默認構造函數中明智地初始化至少一個成員”,但這花了太多時間來防范Murphy。C ++在某些方面傾向于信任程序員。
- 3 回答
- 0 關注
- 567 瀏覽
添加回答
舉報