C 中自己理解的一些細節哈

2021-06-21 10:45:20 字數 1357 閱讀 7948

對於大牛來說,我寫的可能很低階哈,留給自己看,以後遇到的都慢慢補充哈!^^

1.每乙個類定義結束後,不要忘了在類的結束符"}"後面加上乙個";"哦!

2.建構函式和析構函式肯定是不能只申明而不定義的,因為這個兩個函式無論如何都會被呼叫。其他成員函式倒是可以只申明而不定義---只要你不呼叫它!

3.乙個類會隱含的提供建構函式、建構函式、複製建構函式、賦值函式、析構函式!

4.乙個空類或結構體,但用sizeof去測它的大小時並不為空,而是為1!這是編輯器給它加的,試想如果不加乙個位元組那麼a a[3];(a是乙個空類),那a[0],a[1],a[2]豈不是都是同乙個位址?可見0不僅在數學上要特殊考慮,在計算機中也要特殊考慮哦!

5.如果你不在乙個類成員前面加上public、private、protected的訪問控制的描述,class裡面預設是private,而struct裡面是public哦!

6.有non-virtual member function(無論是non-static還是static)的class不會改變class的大小哦,但是有virtual member function的class會增加乙個指標位元組的大小,這是因為有virtual member function的class要維持乙個指向vtbl(virual table)表的指標,這與c++物件模型有關!

7.類的non-static會使類增加相應的大小,而static則不。理由同6哦!

8.6,7也許讓你困惑,現在就來說說需要多少記憶體才能表現乙個class object呢?一般而言有:

a.其中nonstatic data members的總和大小。

b.加上任何由於alignment的需求而填補上去的空間(可能存在於members之間,也可能存在於集合體邊界---可以理解為邊界補齊吧)。

c.加上為了支援virtual而由內部產生的額外負擔。

9.無論是public還是private的靜態成員變數只能在class裡面定義,然後在類外面完成初始化(以上已在vc環境中,有的編譯器可以在類中宣告的時候就可以初始化了)。

10.c++以下列方式支援多型

a.經由一組隱含的轉化操作,例如把乙個derived class指標轉化為乙個指向其public base type的指標:shape *ps = new circle().

b.經由 virtual function 機制:ps->rotate();

c.經由dynamic_cast和typeid運算子:if( circle *pc = dynamic_cast< circle *>( ps )) ...

11. 析構函式最好不要宣告為純虛函式。

12. 靜態成員函式不能被const virtual volatile關鍵字描述。靜態成員函式不能對直接訪問其 class 中的 非靜態成員變數!

C 一些細節

include include pthread.h using namespace std static pthread mutex t mutex class single class single public static single instance static single getin...

C 的一些細節

1.c 中,將負數賦值給unsigned是完全合法的。例如,將 1賦值給unsigned char,那麼結果是255.2.c 中,double的精度和計算速度都要超過float,long double則需要承擔額外的執行代價。3.std ou t hi d endl 等價於std out hi 4....

rosbag中的一些細節

將執行的ros軟體上的資料記錄到乙個.bag檔案,然後重放資料再產生相同的效果。1.記錄資料 建立乙個bag檔案 從乙個執行的ros系統中記錄topic的資料,這個topic資料會在乙個bag檔案中積累。roscore rosrun turtlesim turtlesim node rosrun t...