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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

C++基础知识简答题

發(fā)布時(shí)間:2023/12/20 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++基础知识简答题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、C++ 可執(zhí)行程序的內(nèi)存分布

BSS:Block Started by Symbol?
存放程序中未初始化的全局變量?
數(shù)據(jù)段:?
存放已初始化的全局變量,靜態(tài)內(nèi)存分配?
代碼段:?
存放執(zhí)行代碼?
堆heap:?
存放運(yùn)行中動態(tài)分配的內(nèi)存段,可擴(kuò)張或縮減?
棧stack:?
存放程序的局部變量,在函數(shù)被調(diào)用時(shí),棧還用來傳遞參數(shù)和返回值

2、C++編譯原理

1、預(yù)編譯:宏展開過程?
2、編譯:inline在此時(shí)展開,從C++代碼到匯編語言?
3、匯編:匯編語言到機(jī)器語言?
4、鏈接?
引申:內(nèi)聯(lián)函數(shù)和宏:?
兩者都可以節(jié)省函數(shù)棧的開銷,提高運(yùn)行效率。因?yàn)楹瘮?shù)在運(yùn)行時(shí)需要保持現(xiàn)場和上下文后恢復(fù)現(xiàn)場,有時(shí)間和空間的開銷?
宏在調(diào)用時(shí)直接展開,更有效率,但不能使用私有成員,不能調(diào)試,容易產(chǎn)生二義性?
內(nèi)聯(lián)函數(shù)由編譯器展開

3、C++ extern關(guān)鍵字的作用

加在變量或函數(shù)前,表明該內(nèi)容的定義在其他文件中。?
extern “C” 提示C++編譯器按C語言的規(guī)則編譯函數(shù),舉例:?
C++生成的動態(tài)庫.so文件,如果按C++命名,則函數(shù)的名稱會因?yàn)槔^承等原因變化,比如func()會變成func_%20(),其他程序調(diào)用dlopen動態(tài)打開該庫時(shí),按照func名稱會搜索不到相應(yīng)的函數(shù)。

4、static關(guān)鍵字的作用

在全局變量中加static,稱為靜態(tài)全局變量有以下特點(diǎn):?
在數(shù)據(jù)段中存放?
會被自動初始化成0?
在文件之外不可見

另外,static修飾函數(shù),可以使其成為類的靜態(tài)成員函數(shù),成員變量和類相關(guān),和類的對象無關(guān)。?
及時(shí)沒有具體對象,也能調(diào)用類的靜態(tài)成員函數(shù)——單例模式

5、const關(guān)鍵字的作用

主要有四個方面:常量、函數(shù)輸入、函數(shù)輸出、成員函數(shù),都是為了讓被修飾的內(nèi)容受到保護(hù),防止意外修改?
1、const修飾常量,最常用,常量不讓修改?
2、const修飾輸入?yún)?shù):?
void StringCopy(char?dest,const char?source),函數(shù)體內(nèi)任何修改source的行為都會報(bào)錯?
3、如果輸入?yún)?shù)采用值傳遞,由于函數(shù)會在棧中自動產(chǎn)生臨時(shí)變量的復(fù)制(拷貝構(gòu)造函數(shù)),因此參數(shù)不用加const?
void func(int x)不能用void func(const int x)?
4、引用傳遞比值傳遞效率高,但是缺點(diǎn)是參數(shù)可能被修改,因此也可以加const修飾?
void func(A& a) –> void func(const A& a)?
5、用const修飾函數(shù)的返回值?
如果以指針傳遞的方式返回,且被const修飾,則賦值給其他指針變量的時(shí)候,要求指針也得用const聲明:?
const char * GetString();?
char * str=GetString();——報(bào)錯?
const char *str=GetString();——正確

如果是值傳遞,由于函數(shù)會自動復(fù)制的關(guān)系,加const沒用

6、const修飾成員函數(shù)

任何不會修改數(shù)據(jù)成員的函數(shù)都應(yīng)聲明為const類型?
1、在const成員函數(shù)中,不慎修改了數(shù)據(jù)成員,會報(bào)錯?
2、在const成員函數(shù)中,不慎調(diào)用了其他非const成員函數(shù),報(bào)錯

7、static、const、static const的初始化

1、在類里創(chuàng)建一個const類型變量時(shí),不能給他初值?
理由:編譯器必須為const類型變量分配存儲空間,但類的聲明又不占用存儲空間?
class foo?
{?
private:?
const int a= 100;——報(bào)錯?
}?
只能在構(gòu)造函數(shù)的初始化列表里初始化:?
A::A(int a):bb(a),其中bb的聲明為 const int bb;?
2、static修飾的類成員變量,既不能在類定義中初始化,也不能在初始化列表里初始化,只能在外頭?
int foo::a=100;?
3、static const也是在類外初始化

8、C++中,new和malloc的區(qū)別

new是c++的操作符,malloc是c中的函數(shù)?
new可以調(diào)用構(gòu)造函數(shù) delete調(diào)用析構(gòu)函數(shù)?
malloc只是單純的分配內(nèi)存,不會初始化成員

9、關(guān)于C++ 多態(tài)和函數(shù)表的關(guān)系

多態(tài)的定義:一個接口,多種方法?
多態(tài)和非多態(tài)的區(qū)別,可以理解為靜態(tài)編譯(重載)和動態(tài)編譯(虛函數(shù))?
多態(tài)是通過虛函數(shù)表來實(shí)現(xiàn)的,重載在編譯時(shí)就確定了函數(shù)的地址,虛函數(shù)的運(yùn)行地址只能在運(yùn)行過程中才能確定

10、C++虛函數(shù)與構(gòu)造、析構(gòu)函數(shù)的關(guān)系

1、構(gòu)造函數(shù)不能使虛的?
理由:存在虛函數(shù)的話,會存在虛函數(shù)表vtable,構(gòu)建的對象會有一個vptr指向虛函數(shù)表,所以不能把構(gòu)造函數(shù)放虛函數(shù)里?
2、析構(gòu)函數(shù)一般都是虛的?
如果是實(shí)的,那么當(dāng)有一個基類指針指向派生類,那么析構(gòu)時(shí)只會析構(gòu)基類的成員,造成派生類的成員沒有正確釋放?
只有是虛的,才會先在虛函數(shù)表中找到派生類,再找基類

如果類中有虛函數(shù),不管有多少個,它派生出來的對象大小都會多4字節(jié),是vptr:指向虛函數(shù)表的指針

11、C++ 構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)、賦值函數(shù)

1、構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)?
特點(diǎn)都是“無中生有”?
A a——通過默認(rèn)構(gòu)造函數(shù)創(chuàng)建一個對象?
2、拷貝構(gòu)造函數(shù)?
用一個類的對象去初始化另一個對象時(shí):?
A b=a;?
A b(a);?
都使用的拷貝構(gòu)造函數(shù)?
淺拷貝:復(fù)制一個指針,指向同一個地址空間?
深拷貝:在內(nèi)存中開辟新的空間,兩個對象獨(dú)立?
拷貝構(gòu)造函數(shù)的聲明:?
A(const A& a)

賦值運(yùn)算函數(shù):?
A& operator=(const A& a)

Linux技術(shù)?
1、epoll和select?
當(dāng)一個程序要讀兩個以上IO時(shí),如果使用阻塞式IO,那么一個文件描述符阻塞,另一個文件描述符有數(shù)據(jù)卻讀不出來,效率很低。?
解決方案有以下幾個:?
1、開一個描述符就起一個線程,維護(hù)起來比較復(fù)雜?
2、用非阻塞IO,得一直輪詢?
3、用異步IO,通過信號量或者回調(diào)觸發(fā)?
4、IO多路復(fù)用(epoll和select)

總結(jié)

以上是生活随笔為你收集整理的C++基础知识简答题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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