C 常見問題

2021-08-31 01:13:16 字數 2629 閱讀 2330

1.reinterpret_cast,static_cast,dynamic_cast、const_cast區別

2.類的大小

class ctest1

;int size = sizeof(ctest1); // 1

class ctest2

static void func2() {}

protected:

static int c;

private:

int a;

char* p;

};int size = sizeof(ctest2); // 12

class ctest3 : public ctest2

;int size = sizeof(ctest3); // 16

class ctest4 : public ctest2

;int size = sizeof(ctest4); // 20

3.char指標

char s = "test";

s[0] = 'a'; // ok

char* p = s;

p[0] = 'a'; // ok

p = "test";

p[0] = 'a'; // error

s = p; // error

char* a = ;

int size = sizeof(a); // 8

char** p1 = a; // ok

4.成員函式指標

class ctest

void func2()

static void func3()

}; typedef void(*func)(void);

typedef void(ctest::*func2)(void);

ctest test;

func f = &ctest::func3;

f(); // func3

func2 f2 = &ctest::func2;

(test.*f2)(); // func2

f2 = &ctest::func;

(test.*f2)(); // func

5.虛函式表

class ctest5

}; typedef void(*func)(void);

ctest5 test;

func f = (func)*((int*)(*(int*)(&test)) + 0);

f(); // test

class cbase

};class cdriver: public cbase

};

cbase *pb = new cdriver;

pb->test(); // driver test

cdriver *pd = dynamic_cast(pb);

pd->test(); // error

6.深拷貝與淺拷貝

class ctest6

~ctest6()

ctest6(const ctest6& test)

private:

int n;

int* p;

};

7.位元組對齊

某些時候需要禁用位元組對齊,如通訊幀定義    #pragma pack(1)

struct mystruct

;int size = sizeof(mystruct); // 24

8.static修飾符

class ctest6

~ctest6()

ctest6(const ctest6& test)

static const int a = 1;

static const float f;

private:

int n;

int* p;

};const float ctest6::f = 0.5f;

9.const修飾的成員函式呼叫非const成員函式

class ctest6

~ctest6()

ctest6(const ctest6& test)

static const int a = 1;

static const float f;

void test1()const

void test2()

private:

int n;

int* p;

}; const float ctest6::f = 0.5f;

ctest6 test;

test.test1(); // test2

C 常見問題

1.預處理 預處理的主要作用就是對資源進行等價替換,最常見的預處理有 檔案包含 include 條件編譯 if,ifndef,ifdef,endif,undef 布局控制 pragma 巨集替換等 define 等。1.1 標頭檔案中放什麼?標頭檔案一般用於類的定義 extern變數和函式的宣告。由...

C 常見問題

問題描述 解決方式 無法解析的外部符號 public cdecl minidl operator operator void 0operator minidl qeaa xz 該符號在函式 public cdecl minidl denseop denseop void 0denseop minid...

c 常見問題

編譯器總是根據型別來呼叫類成員函式。但是乙個派生類的指標可以安全地轉化為乙個基類的指標。這樣刪除乙個基類的指標的時候,c 不管這個指標指向乙個基類物件還是乙個派生類的對 象,調刪除線格式用的都是基類的析構函式而不是派生類的。如果你依賴於派生類的析構函式的 來釋放資源,而沒有過載析構函式,那麼會有資源...