Data 語義學

一個class的data members,一般而言,可以表現這個class在程序執(zhí)行時的某種狀態(tài)。Nonstatic data members放置的是“個別的class object”感興趣的數據,static data members則放置的是“整個class”感興趣的數據。

C++對象模型盡量以空間優(yōu)化和存取速度優(yōu)化的考慮來表現nonstatic data members,并且保持和C語言struct數據配置的兼容性。它們把數據直接存放在每一個class object之中。對于繼承而來的nonstatic data members(不管是virtual還是nonvirtual base class)也是如此。不過沒有強制定義其間的排列順序。
至于static data members,則被放置在程序的一個global data segment中,不會影響個別class object的大小。在程序之中,不管該class被產生出多少個objects(經由直接產生或間接派生),static data members永遠只存在一份實例(甚至即使該class沒有任何object實例,其static data members也已存在)。但是一個template class的static data members的行為稍有不同。

Data Member的綁定(The Binding of a Data Member)

C++ Standard以“member scope resolution rules”來精煉這個“rewriting rule”,其效果是,如果一個inline函數在class聲明之后立即被定義的話,那么就還是對齊評估求值(evaluae)。也就是說,當一個人寫下這樣的代碼:

extern int x;class Point3d{public:    //對于函數本身的分析將延遲直至class聲明的右大括號出現才開始 
    float X() const { return x; }    //...private:    float x;
};//事實上,分析在這里運行

時,對于member functions本身的分析,會直到整個class的聲明都出現了才開始。
因此,在一個inline member function軀體之內的一個data member綁定操作,會在整個class聲明之后才發(fā)生。

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網站設計培訓,網站建設培訓學習是年輕人改變自己的最好方式