日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

二十万字C/C++、嵌入式软开面试题全集宝典一

發(fā)布時(shí)間:2025/3/15 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二十万字C/C++、嵌入式软开面试题全集宝典一 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

目錄

1、引用和指針的區(qū)別?

2、從匯編層去解釋一下引用

3、C++中的指針參數(shù)傳遞和引用參數(shù)傳遞

4、形參與實(shí)參的區(qū)別?

5、static的用法和作用?

6、靜態(tài)變量什么時(shí)候初始化

7、const?

8、const成員函數(shù)的理解和應(yīng)用?

9、指針和const的用法?const?修飾指針如何區(qū)分?

10、C++?是怎么定義常量的?常量存放在內(nèi)存的哪個(gè)位置?

11、mutable

12、extern用法?

13、int轉(zhuǎn)字符串,字符串轉(zhuǎn)int?strcat,strcpy,strncpy,memset,memcpy的內(nèi)部實(shí)現(xiàn)?

14、深拷貝與淺拷貝?

15、C++模板是什么,底層怎么實(shí)現(xiàn)的?


??

1、引用和指針的區(qū)別?

1.指針是一個(gè)實(shí)體,需要分配內(nèi)存空間。引用只是變量的別名,不需要分配內(nèi)存空間。

2.引用在定義的時(shí)候必須進(jìn)行初始化,并且不能夠改變。指針在定義的時(shí)候不一定要初始化,并且指向的空間可變。(注:“引用不能為空(NULL),引用必須與合法的存儲(chǔ)單元關(guān)聯(lián),指針則可以是NULL)”)

3.有多級(jí)指針,但是沒有多級(jí)引用,只能有一級(jí)引用。

4.指針和引用的自增運(yùn)算結(jié)果不一樣。(指針是指向下一個(gè)空間,引用時(shí)引用的變量值加1)

5.sizeof 引用得到的是所指向的變量(對(duì)象)的大小,而sizeof 指針得到的是指針本身的大小。

6.引用訪問一個(gè)變量是直接訪問,而指針訪問一個(gè)變量是間接訪問。

使用指針前最好做類型檢查,防止野指針的出現(xiàn);

7.引用底層是通過指針實(shí)現(xiàn)的;

8.作為參數(shù)時(shí)也不同,傳指針的實(shí)質(zhì)是傳值,傳遞的值是指針的地址;傳引用的實(shí)質(zhì)是傳地址,傳遞的是變量的地址。

2、從匯編層去解釋一下引用

9:??????????int x = 1; 00401048????mov dword ptr [ebp-4],1 10:?????????int &b = x; 0040104F????lea eax,[ebp-4] 00401052????mov dword ptr [ebp-8],eax

x的地址為ebp-4,b的地址為ebp-8,因?yàn)闂?nèi)的變量?jī)?nèi)存是從高往低進(jìn)行分配的。所以b的地址比x的低。lea eax,[ebp-4]? 這條語句將x的地址ebp-4放入eax寄存器mov dword ptr [ebp-8],eax?這條語句將eax的值放入b的地址ebp-8中上面兩條匯編的作用即:將x的地址存入變量b中,這不和將某個(gè)變量的地址存入指針變量是一樣的嗎?所以從匯編層次來看,的確引用是通過指針來實(shí)現(xiàn)的。

3、C++中的指針參數(shù)傳遞和引用參數(shù)傳遞

1.指針參數(shù)傳遞本質(zhì)上是值傳遞,它所傳遞的是一個(gè)地址值。值傳遞過程中,被調(diào)函數(shù)的形式參數(shù)作為被調(diào)函數(shù)的局部變量處理,會(huì)在棧中開辟內(nèi)存空間以存放由主調(diào)函數(shù)傳遞進(jìn)來的實(shí)參值,從而形成了實(shí)參的一個(gè)副本(替身)。值傳遞的特點(diǎn)是,被調(diào)函數(shù)對(duì)形式參數(shù)的任何操作都是作為局部變量進(jìn)行的,不會(huì)影響主調(diào)函數(shù)的實(shí)參變量的值(形參指針變了,實(shí)參指針不會(huì)變)。

2.引用參數(shù)傳遞過程中,被調(diào)函數(shù)的形式參數(shù)也作為局部變量在棧中開辟了內(nèi)存空間,但是這時(shí)存放的是由主調(diào)函數(shù)放進(jìn)來的實(shí)參變量的地址。被調(diào)函數(shù)對(duì)形參(本體)的任何操作都被處理成間接尋址,即通過棧中存放的地址訪問主調(diào)函數(shù)中的實(shí)參變量(根據(jù)別名找到主調(diào)函數(shù)中的本體)。因此,被調(diào)函數(shù)對(duì)形參的任何操作都會(huì)影響主調(diào)函數(shù)中的實(shí)參變量。

3.引用傳遞和指針傳遞是不同的,雖然他們都是在被調(diào)函數(shù)??臻g上的一個(gè)局部變量,但是任何對(duì)于引用參數(shù)的處理都會(huì)通過一個(gè)間接尋址的方式操作到主調(diào)函數(shù)中的相關(guān)變量。而對(duì)于指針傳遞的參數(shù),如果改變被調(diào)函數(shù)中的指針地址,它將應(yīng)用不到主調(diào)函數(shù)的相關(guān)變量。如果想通過指針參數(shù)傳遞來改變主調(diào)函數(shù)中的相關(guān)變量(地址),那就得使用指向指針的指針或者指針引用。

4.從編譯的角度來講,程序在編譯時(shí)分別將指針和引用添加到符號(hào)表上,符號(hào)表中記錄的是變量名及變量所對(duì)應(yīng)地址。指針變量在符號(hào)表上對(duì)應(yīng)的地址值為指針變量的地址值,而引用在符號(hào)表上對(duì)應(yīng)的地址值為引用對(duì)象的地址值(與實(shí)參名字不同,地址相同)。符號(hào)表生成之后就不會(huì)再改,因此指針可以改變其指向的對(duì)象(指針變量中的值可以改),而引用對(duì)象則不能修改。

4、形參與實(shí)參的區(qū)別?

1.形參變量只有在被調(diào)用時(shí)才分配內(nèi)存單元,在調(diào)用結(jié)束時(shí),?即刻釋放所分配的內(nèi)存單元。因此,形參只有在函數(shù)內(nèi)部有效。?函數(shù)調(diào)用結(jié)束返回主調(diào)函數(shù)后則不能再使用該形參變量。

2.實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等, 無論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應(yīng)預(yù)先用賦值,輸入等辦法使實(shí)參獲得確定值,會(huì)產(chǎn)生一個(gè)臨時(shí)變量。

3.實(shí)參和形參在數(shù)量上,類型上,順序上應(yīng)嚴(yán)格一致,?否則會(huì)發(fā)生“類型不匹配”的錯(cuò)誤。

4.函數(shù)調(diào)用中發(fā)生的數(shù)據(jù)傳送是單向的。 即只能把實(shí)參的值傳送給形參,而不能把形參的值反向地傳送給實(shí)參。 因此在函數(shù)調(diào)用過程中,形參的值發(fā)生改變,而實(shí)參中的值不會(huì)變化。

5.當(dāng)形參和實(shí)參不是指針類型時(shí),在該函數(shù)運(yùn)行時(shí),形參和實(shí)參是不同的變量,他們?cè)趦?nèi)存中位于不同的位置,形參將實(shí)參的內(nèi)容復(fù)制一份,在該函數(shù)運(yùn)行結(jié)束的時(shí)候形參被釋放,而實(shí)參內(nèi)容不會(huì)改變。

6.值傳遞:有一個(gè)形參向函數(shù)所屬的??截悢?shù)據(jù)的過程,如果值傳遞的對(duì)象是類對(duì)象????或是大的結(jié)構(gòu)體對(duì)象,將耗費(fèi)一定的時(shí)間和空間。(傳值)

7.指針傳遞:同樣有一個(gè)形參向函數(shù)所屬的??截悢?shù)據(jù)的過程,但拷貝的數(shù)據(jù)是一個(gè)固定為4字節(jié)的地址。(傳值,傳遞的是地址值)

8.引用傳遞:同樣有上述的數(shù)據(jù)拷貝過程,但其是針對(duì)地址的,相當(dāng)于為該數(shù)據(jù)所在的地址起了一個(gè)別名。(傳地址)

9.效率上講,指針傳遞和引用傳遞比值傳遞效率高。一般主張使用引用傳遞,代碼邏輯上更加緊湊、清晰。

5、static的用法和作用?

1)static作?:控制變量的存儲(chǔ)?式和可?性。

1.static作用1:隱藏。(static函數(shù),static變量均可)

當(dāng)同時(shí)編譯多個(gè)文件時(shí),所有未加static前綴的全局變量和函數(shù)都具有全局可見性。

2.static作用2:

保持變量?jī)?nèi)容的持久。(static變量中的記憶功能和全局生存期)存儲(chǔ)在靜態(tài)數(shù)據(jù)區(qū)的變量會(huì)在程序剛開始運(yùn)行時(shí)就完成初始化,也是唯一的一次初始化。共有兩種變量存儲(chǔ)在靜態(tài)存儲(chǔ)區(qū):全局變量和static變量,只不過和全局變量比起來,static可以控制變量的可見范圍,說到底static還是用來隱藏的。

3.static作用3:默認(rèn)初始化為0(static變量)

其實(shí)全局變量也具備這一屬性,因?yàn)槿肿兞恳泊鎯?chǔ)在靜態(tài)數(shù)據(jù)區(qū)。在靜態(tài)數(shù)據(jù)區(qū),內(nèi)存中所有的字節(jié)默認(rèn)值都是0x00,某些時(shí)候這一特點(diǎn)可以減少程序員的工作量。

2)static用法:

用法1:修飾局部變量:

?般情況下,對(duì)于局部變量在程序中是存放在棧區(qū)的,并且局部的?命周期在包含語句塊執(zhí)?結(jié)束時(shí)便結(jié)束了。但是如果? static 關(guān)鍵字修飾的話,該變量便會(huì)存放在靜態(tài)數(shù)據(jù)區(qū),其?命周期會(huì)?直延續(xù)到整個(gè)程序執(zhí)?結(jié)束。但是要注意的是,雖然?static 對(duì)局部變量進(jìn)?修飾之后,其?命周期以及存儲(chǔ)空間發(fā)?了變化,但其作?域并沒有改變,作?域還是限制在其語句塊。

用法2:修飾全部變量:

對(duì)于?個(gè)全局變量,它既可以在本?件中被訪問到,也可以在同?個(gè)?程中其它源?件被訪問(添加 extern進(jìn)?聲明即可)。?static對(duì)全局變量進(jìn)?修飾改變了其作?域范圍,由原來的整個(gè)?程可?變成了本?件可?。

用法3:修飾函數(shù):

?static?修飾函數(shù),情況和修飾全局變量類似,也是改變了函數(shù)的作?域。

用法4:修飾類:

如果 C++ 中對(duì)類中的某個(gè)函數(shù)?static修飾,則表示該函數(shù)屬于?個(gè)類?不是屬于此類的任何特定對(duì)象;如果對(duì)類中的某個(gè)變量進(jìn)?static修飾,則表示該變量以及所有的對(duì)象所有,存儲(chǔ)空間中只存在?個(gè)副本,可以通過;類和對(duì)象去調(diào)?。(補(bǔ)充:靜態(tài)?常量數(shù)據(jù)成員,其只能在類外定義和初始化,在類內(nèi)僅是聲明?已。)

用法5:C++中的類成員聲明static

5.1函數(shù)體內(nèi)static變量的作用范圍為該函數(shù)體,不同于auto變量,該變量的內(nèi)存只被分配一次,因此其值在下次調(diào)用時(shí)仍維持上次的值;

5.2在模塊內(nèi)的static全局變量可以被模塊內(nèi)所用函數(shù)訪問,但不能被模塊外其它函數(shù)訪問;

5.3在模塊內(nèi)的static函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用,這個(gè)函數(shù)的使用范圍被限制在聲明它的模塊內(nèi);???

5.4在類中的static成員變量屬于整個(gè)類所擁有,對(duì)類的所有對(duì)象只有一份拷貝;???

5.5在類中的static成員函數(shù)屬于整個(gè)類所擁有,這個(gè)函數(shù)不接收this指針,因而只能訪問類的static成員變量。

類內(nèi):

5.6static類對(duì)象必須要在類外進(jìn)行初始化,static修飾的變量先于對(duì)象存在,所以static修飾的變量要在類外初始化;

5.7由于static修飾的類成員屬于類,不屬于對(duì)象,因此static類成員函數(shù)是沒有this指針的,this指針是指向本對(duì)象的指針。正因?yàn)闆]有this指針,所以static類成員函數(shù)不能訪問非static的類成員,只能訪問 static修飾的類成員;

5.8 static成員函數(shù)不能被virtual修飾,static成員不屬于任何對(duì)象或?qū)嵗?#xff0c;所以加上virtual沒有任何實(shí)際意義;靜態(tài)成員函數(shù)沒有this指針,虛函數(shù)的實(shí)現(xiàn)是為每一個(gè)對(duì)象分配一個(gè)vptr指針,而vptr是通過this指針調(diào)用的,所以不能為virtual;虛函數(shù)的調(diào)用關(guān)系,this->vptr->ctable->virtual function

6、靜態(tài)變量什么時(shí)候初始化

1.初始化只有一次,但是可以多次賦值,在主程序之前,編譯器已經(jīng)為其分配好了內(nèi)存(靜態(tài)存儲(chǔ)區(qū))。

2.靜態(tài)局部變量和全局變量一樣,數(shù)據(jù)都存放在全局區(qū)域,所以在主程序之前,編譯器已經(jīng)為其分配好了內(nèi)存,但在C和C++中靜態(tài)局部變量的初始化節(jié)點(diǎn)又有點(diǎn)不太一樣。在C中,初始化發(fā)生在代碼執(zhí)行之前,編譯階段分配好內(nèi)存之后,就會(huì)進(jìn)行初始化,所以我們看到在C語言中無法使用變量對(duì)靜態(tài)局部變量進(jìn)行初始化,在程序運(yùn)行結(jié)束,變量所處的全局內(nèi)存會(huì)被全部回收。

3.在C++中,初始化時(shí)在執(zhí)行相關(guān)代碼時(shí)才會(huì)進(jìn)行初始化,主要是由于C++引入對(duì)象后,要進(jìn)行初始化必須執(zhí)行相應(yīng)構(gòu)造函數(shù)和析構(gòu)函數(shù),在構(gòu)造函數(shù)或析構(gòu)函數(shù)中經(jīng)常會(huì)需要進(jìn)行某些程序中需要進(jìn)行的特定操作,并非簡(jiǎn)單地分配內(nèi)存。所以C++標(biāo)準(zhǔn)定為全局或靜態(tài)對(duì)象是有首次用到時(shí)才會(huì)進(jìn)行構(gòu)造,并通過atexit()來管理。在程序結(jié)束,按照構(gòu)造順序反方向進(jìn)行逐個(gè)析構(gòu)。所以在C++中是可以使用變量對(duì)靜態(tài)局部變量進(jìn)行初始化的。

7、const?

在C語言里,const只是聲明只讀屬性,還是可以通過修改內(nèi)存上的值進(jìn)行修改,只不過這種做法是未定義的。C++里的常量是真正的常量,放在符號(hào)表里。

1.阻止一個(gè)變量被改變,可以使用const關(guān)鍵字。在定義該const變量時(shí),通常需要對(duì)它進(jìn)行初始化,因?yàn)橐院缶蜎]有機(jī)會(huì)再去改變它了;

2.對(duì)指針來說,可以指定指針本身為const,也可以指定指針?biāo)傅臄?shù)據(jù)為const,或二者同時(shí)指定為const;

3.在一個(gè)函數(shù)聲明中,const可以修飾形參,表明它是一個(gè)輸入?yún)?shù),在函數(shù)內(nèi)部不能改變其值;

5.對(duì)于類的成員函數(shù),可以指定其返回值為const類型,以使得其返回值不為“左值”。若指定成員函數(shù)為const類型,則表明其是一個(gè)常函數(shù),不能修改類的成員變量,類的常對(duì)象只能訪問類的常成員函數(shù);

6、const成員函數(shù)可以訪問非const對(duì)象的非const數(shù)據(jù)成員、const數(shù)據(jù)成員,也可以訪問const對(duì)象內(nèi)的所有數(shù)據(jù)成員;

7、非const成員函數(shù)可以訪問非const對(duì)象的非const數(shù)據(jù)成員、const數(shù)據(jù)成員,但不可以訪問const對(duì)象的任意數(shù)據(jù)成員;

8、一個(gè)沒有明確聲明為const的成員函數(shù)被看作是將要修改對(duì)象中數(shù)據(jù)成員的函數(shù),而且編譯器不允許它為一個(gè)const對(duì)象所調(diào)用。因此const對(duì)象只能調(diào)用const成員函數(shù)。

9、const類型變量可以通過類型轉(zhuǎn)換符const_cast將const類型轉(zhuǎn)換為非const類型;

10、const類型變量必須定義的時(shí)候進(jìn)行初始化,因此也導(dǎo)致如果類的成員變量有const類型的變量,那么該變量必須在類的初始化列表中進(jìn)行初始化;

11、對(duì)于函數(shù)值傳遞的情況,因?yàn)閰?shù)傳遞是通過復(fù)制實(shí)參創(chuàng)建一個(gè)臨時(shí)變量傳遞進(jìn)函數(shù)的,函數(shù)內(nèi)只能改變臨時(shí)變量,但無法改變實(shí)參。則這個(gè)時(shí)候無論加不加const對(duì)實(shí)參不會(huì)產(chǎn)生任何影響。但是在引用或指針傳遞函數(shù)調(diào)用中,因?yàn)閭鬟M(jìn)去的是一個(gè)引用或指針,這樣函數(shù)內(nèi)部可以改變引用或指針?biāo)赶虻淖兞?#xff0c;這時(shí)const 才是實(shí)實(shí)在在地保護(hù)了實(shí)參所指向的變量。因?yàn)樵诰幾g階段編譯器對(duì)調(diào)用函數(shù)的選擇是根據(jù)實(shí)參進(jìn)行的,所以,只有引用傳遞和指針傳遞可以用是否加const來重載。一個(gè)擁有頂層const的形參無法和另一個(gè)沒有頂層const的形參區(qū)分開來。

8、const成員函數(shù)的理解和應(yīng)用?

①const Stock & Stock::topval (②const Stock & s)?③const

①處const:確保返回的Stock對(duì)象在以后的使用中不能被修改??

②處const:確保此方法不修改傳遞的參數(shù) S

③處const:保證此方法不修改調(diào)用它的對(duì)象,const對(duì)象只能調(diào)用const成員函數(shù),不能調(diào)用非const函數(shù)

9、指針和const的用法?const?修飾指針如何區(qū)分?

當(dāng)const修飾指針時(shí),由于const的位置不同,它的修飾對(duì)象會(huì)有所不同。

1、int *const p2中const修飾p2的值,所以理解為p2的值不可以改變,即p2只能指向固定的一個(gè)變量地址,但可以通過*p2讀寫這個(gè)變量的值。頂層指針表示指針本身是一個(gè)常量

2、int const *p1或者const int *p1兩種情況中const修飾*p1,所以理解為*p1的值不可以改變,即不可以給*p1賦值改變p1指向變量的值,但可以通過給p賦值不同的地址改變這個(gè)指針指向。底層指針表示指針?biāo)赶虻淖兞渴且粋€(gè)常量。

4、int const *const p;p這個(gè)指針不可改,指向的值也不可變。

示例:下?都是合法的聲明,但是含義?不同:

const int * p1; //指向整形常量的指針,它指向的值不能修改

int * const p2; //指向整形的常量指針 ,它不能在指向別的變量,但指向(變量)的值可以修改。

const int *const p3; //指向整形常量 的 常量指針 。它既不能再指向別的常量,指向的值也不能修改。

理解這些聲明的技巧在于,const是右結(jié)合型。查看關(guān)鍵字const右邊來確定什么被聲明為常量 ,如果該關(guān)鍵字的右邊是類型,則值是常量;如果關(guān)鍵字的右邊是指針變量,則指針本身是常量。

10、C++?是怎么定義常量的?常量存放在內(nèi)存的哪個(gè)位置?

對(duì)于局部常量,存放在棧區(qū);

對(duì)于全局常量,編譯期?般不分配內(nèi)存,放在符號(hào)表中以提?訪問效率;

字?值常量,?如字符串,放在常量區(qū)。

11、mutable

1.如果需要在const成員方法中修改一個(gè)成員變量的值,那么需要將這個(gè)成員變量修飾為mutable。即用mutable修飾的成員變量不受const成員方法的限制;

2.可以認(rèn)為mutable的變量是類的輔助狀態(tài),但是只是起到類的一些方面表述的功能,修改他的內(nèi)容我們可以認(rèn)為對(duì)象的狀態(tài)本身并沒有改變的。實(shí)際上由于const_cast的存在,這個(gè)概念很多時(shí)候用處不是很到了。

12、extern用法?

作用:

1.修飾符 extern ?在變量或者函數(shù)的聲明前,?來說明 “此變量/函數(shù)是在別處定義的,要在此處引?”。

2.有了#include,為啥要? extern?因?yàn)? extern 能夠提前進(jìn)行聲明,會(huì)加速程序的編譯過程,這樣能節(jié)省時(shí)間。

用法:

1、extern修飾變量的聲明

如果文件a.c需要引用b.c中變量int v,就可以在a.c中聲明extern int v,然后就可以引用變量v。

2、extern修飾函數(shù)的聲明

如果文件a.c需要引用b.c中的函數(shù),比如在b.c中原型是int fun(int mu),那么就可以在a.c中聲明extern int fun(int mu),然后就能使用fun來做任何事情。就像變量的聲明一樣,extern int fun(int mu)可以放在a.c中任何地方,而不一定非要放在a.c的文件作用域的范圍中。

3、extern修飾符可用于指示C或者C++函數(shù)的調(diào)用規(guī)范。

比如在C++中調(diào)用C庫函數(shù),就需要在C++程序中用extern “C”聲明要引用的函數(shù)。這是給鏈接器用的,告訴鏈接器在鏈接的時(shí)候用C函數(shù)規(guī)范來鏈接。主要原因是C++和C程序編譯完成后在目標(biāo)代碼中命名規(guī)則不同。

13、int轉(zhuǎn)字符串,字符串轉(zhuǎn)int?strcat,strcpy,strncpy,memset,memcpy的內(nèi)部實(shí)現(xiàn)?

c++11標(biāo)準(zhǔn)增加了全局函數(shù)std::to_string

可以使用std::stoi/stol/stoll等等函數(shù)

strcpy擁有返回值,有時(shí)候函數(shù)原本不需要返回值,但為了增加靈活性如支持鏈?zhǔn)奖磉_(dá)。

14、深拷貝與淺拷貝?

1.淺拷貝:只是拷貝了基本類型的數(shù)據(jù),而引用類型數(shù)據(jù),復(fù)制后也是會(huì)發(fā)生引用,我們把這種拷貝叫做“(淺復(fù)制)淺拷貝”,換句話說,淺復(fù)制僅僅是指向被復(fù)制的內(nèi)存地址,如果原地址中對(duì)象被改變了,那么淺復(fù)制出來的對(duì)象也會(huì)相應(yīng)改變。

深拷貝:在計(jì)算機(jī)中開辟了一塊新的內(nèi)存地址用于存放復(fù)制的對(duì)象。

?

2.在某些狀況下,類內(nèi)成員變量需要?jiǎng)討B(tài)開辟堆內(nèi)存,如果實(shí)行淺拷貝,也就是把對(duì)象里的值完全復(fù)制給另一個(gè)對(duì)象,如A=B。這時(shí),如果B中有一個(gè)成員變量指針已經(jīng)申請(qǐng)了內(nèi)存,那A中的那個(gè)成員變量也指向同一塊內(nèi)存。這就出現(xiàn)了問題:當(dāng)B把內(nèi)存釋放了(如:析構(gòu)),這時(shí)A內(nèi)的指針就是野指針了,出現(xiàn)運(yùn)行錯(cuò)誤。

3.深拷?與淺拷?之間的區(qū)別就在于深拷?會(huì)在堆內(nèi)存中另外申請(qǐng)空間來存儲(chǔ)數(shù)據(jù),從?也就解決來野指針的問題。簡(jiǎn)??之,當(dāng)數(shù)據(jù)成員中有指針時(shí),必需要?深拷?更加安全。

lsy注:賦值運(yùn)算符重載是深拷貝還是淺拷貝?可以深拷貝也可以淺拷貝。提供了深拷貝的可能性。

15、C++模板是什么,底層怎么實(shí)現(xiàn)的?

1、模板是C++支持參數(shù)化多態(tài)的工具,為類或者函數(shù)聲明一種一般模式,使得類中的某些數(shù)據(jù)成員或者成員函數(shù)的參數(shù)、返回值取得任意類型。模板是一種對(duì)類型進(jìn)行參數(shù)化的工具。

2、函數(shù)模板的實(shí)例化是由編譯程序處理函數(shù)調(diào)用時(shí)自動(dòng)完成的;類模板的實(shí)例化是由程序員在程序中顯式的指定;函數(shù)模板針對(duì)參數(shù)類型不同和返回值類型不同的函數(shù);類模板針對(duì)數(shù)據(jù)成員、成員函數(shù)和繼承的基類類型不同的類。

3、編譯器會(huì)對(duì)函數(shù)模板進(jìn)行兩次編譯:在聲明的地方對(duì)模板代碼本身進(jìn)行編譯,在對(duì)參數(shù)替換后的代碼進(jìn)行編譯。

4、函數(shù)模板要被實(shí)例化后才能成為真正的函數(shù),在使用函數(shù)模板的源文件中包含函數(shù)模板的頭文件,如果該頭文件中只有聲明,沒有定義,那編譯器無法實(shí)例化該模板,最終導(dǎo)致鏈接錯(cuò)誤。

總結(jié)

以上是生活随笔為你收集整理的二十万字C/C++、嵌入式软开面试题全集宝典一的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。