C 面試知識點

2021-09-29 14:52:44 字數 1994 閱讀 1284

大概是一些面試可能會碰到的c++知識點。

具體見effective c++ 3e

宣告使得名字為程式所知,而定義負責建立與名字關聯的實體

只在堆上:將建構函式和析構函式設定為保護,再定義兩個函式專門用於建立和銷毀物件。

只在棧上:禁用class的new運算子,就是將class的operator new宣告為私有即可。

參考這篇文章

堆、棧、**區(**和常量)和全域性/靜態儲存區

++i返回引用,而i++返回拷貝,會有乙個拷貝建構函式的呼叫。

全域性變數會在main函式之前初始化。

所以可以定義乙個類,然後再定義乙個該型別的全域性變數,而類的建構函式就是在main函式之前執行。

malloc/free是用來分配/釋放動態記憶體的函式,new/delete是c++的運算子,用來分配記憶體並初始化物件

主要是堆和棧吧,棧是使用sp(棧指標)控制記憶體的分配,主要是用來儲存區域性變數、函式返回位址和傳遞函式引數(函式引數不多的時候可以直接使用暫存器傳遞);堆上的記憶體程式按需動態分配的,需要程式設計師手動分配和釋放,然後不同的編譯器對堆上的記憶體的管理方式也不太一樣,主要的原因是效能和記憶體碎片,所以也有一些開源分配器,當然也可以自己造乙個輪子(記憶體池之類的),來適應特定專案的需求,不過編譯器提供的分配器是比較優良的,一般不用自己做(自己做也比較難做出來)。

參考文章

堆記憶體管理

淺拷貝有點像引用,兩個副本共享同乙個實體;深拷貝像兩個變數拷貝,拷貝完成之後互不影響。

參考文章

c++為了實現函式過載,會按函式名和引數重新生成乙個新的名字,重新編碼之後函式名就不重複了。而c語言沒有過載,編譯器對函式名的處理最多只是加乙個下劃線,如果在乙個cpp檔案裡面引用了另乙個c檔案裡面的函式,在鏈結時就會報錯,沒有找到這個函式;因為c++編譯器處理之後的函式名和c編譯器處理之後的函式名不一致。這個時候可以使用extern c來引入需要呼叫的函式,這個時候c++編譯器就會按照c編譯器的方式去處理這個函式名,就能得到一樣的函式名,鏈結就不會有錯誤。

編譯器是否能自動推導

偏特化初始值列表(有些成員的初始化必須使用列表初始化)、預設建構函式的作用

三五法則

=default,=delete,

可以通過類名::變數名訪問,所有的類共享同乙份實體。

type * const this,如果是const函式,則變為const type * const this;靜態成員函式沒有this指標,它就相當於全域性函式一樣。

public、protected和private

預設訪問許可權和預設繼承許可權不同,class是private,struct是public(想一下為了相容c的語法)。

通過在類成員函式前面加virtual關鍵字,將乙個函式宣告為虛函式。子類通過重寫這個函式,再通過基類的引用或者指標訪問這個函式,就可以使用多型。

純虛函式:沒有函式體且被複製為0(=0)的函式,擁有純虛函式的類稱為抽象基類,不可以定義該型別的變數,但是可以定義引用或者指標。

通過基類的指標或者引用來使用多型時,基類成為靜態型別,實際的型別成為動態型別,靜態型別決定了可以訪問的介面,動態型別決定具體的行為。

虛函式表

建構函式不可以為虛函式,虛指標就是在建構函式裡初始化的。析構函式可以,析構函式為虛函式的作業是在繼承的時候避免記憶體洩露。

虛繼承,一般是在菱形繼承裡出現,表示共享它們的共有父類,編譯器實現虛基類共享的方式也不同,通過虛基類指標實現共享,或者用虛表的-1元素表示虛基類在派生類中的偏移等。。

每個元素的起始位置對齊,整體大小對齊

新特性:

shared_ptr、weak_ptr和unique_ptr

匿名可呼叫物件

右值引用

移動建構函式和移動複製運算子

std::move

c++ primer 中文版(第 5 版)

stl原始碼剖析)

effective c++)

深度探索c++物件模型)

比較新的書還有一本effective modern c++ 簡體中文版)

《C 面試知識點》

動態記憶體 1.由內建指標管理的動態記憶體 即new和delete管理動態記憶體 直到被顯式釋放之前它都是存在的。假設該指標變數被銷毀,那該記憶體將不會自動釋放 即所謂的 記憶體洩漏 2.可以用new返回的指標來初始化智慧型指標,但必須使用直接初始化的形式,而不能隱式轉換,因為接受指標引數的智慧型指...

C 面試知識點1

c 指標和引用的區別 相同點 1 都是對位址的概念 指標指向一塊記憶體,而引用是某塊記憶體的別名。不同點 1 指標本身就是乙個物件,允許對指標賦值和拷貝。引用僅是個別名 2 指標不需要在定義的時候賦初值,即可以為空,而且指標生命週期內可以先後指向幾個不同的物件。但是引用必須要初始化 不但不能為空而且...

C 面試知識點總結

巨集定義求最大值 define max x,y x y x y const與define區別define 在編譯前執行,無資料型別,僅僅在編譯前做替換const存在於程式中資料段,分配空間,有資料型別 與c中 define的異同 在c 中的用法 1.與c中 define相同的功能 字元替換 2.保護...