1、C++關(guān)鍵字extern介紹,為什么被C編譯其編譯過的函數(shù),需要加extern "C"?
解析:extern定義為:聲明外部變量【在函數(shù)或者文件外部定義的全局變量】;該關(guān)鍵字告訴編譯器,其聲明的函數(shù)和變量可以在本模塊或者其他模塊中使用。
通常:在模塊的頭文件中對(duì)本模塊提供給其他模塊引用的函數(shù)和全局變量以關(guān)鍵字extern聲明。
extern ”C“ 是連接申明,被它聲明表示編譯器處理代碼時(shí)候按照C語言規(guī)則進(jìn)行編譯;由于C語言是面向過程,不支持類似于C++的重載特性;所以對(duì)于C和C++混合代碼中,需要對(duì)C語言進(jìn)行特殊標(biāo)定,才可以進(jìn)行混合編譯。
2、C/C++語言的特點(diǎn)?
解析:C語言:是一種面向過程的結(jié)構(gòu)化語言;考慮的是如何通過一個(gè)函數(shù)或者過程實(shí)現(xiàn)由輸入獲得輸出的過程;其可以直接訪問內(nèi)存物理地址;可用于硬件/應(yīng)用軟件開發(fā)。
C++語言:是一種面向?qū)ο蟮恼Z言,基于類、對(duì)象和繼承,考慮的是如何構(gòu)造一個(gè)對(duì)象模型,讓這個(gè)模型能夠復(fù)合實(shí)際問題,從而通過模型對(duì)象來實(shí)現(xiàn)輸出或者控制。
3、const和constexpr介紹
解析:const在C/C++中可以定義const常量,也可以修飾函數(shù)形參和返回值。被const修飾的東西可以起到強(qiáng)制保護(hù),防止意外改變,增強(qiáng)程序健壯性??梢允褂胏onst_cast
指針常量:const int* p = new int(1);? //指向數(shù)據(jù)為常量
常量指針:int *const p = new int(2); //指針本身為常量
constexpr是C++11新添加的關(guān)鍵字,用于修飾常量表達(dá)式,使其在編譯期進(jìn)行計(jì)算;和const相比:const表示”只讀“的語義,constexpr表示”常量“的語義。
constexpr變量:可以將變量聲明為constexpr,讓編譯器來判斷是否為一個(gè)常量表達(dá)式;如果用constexpr聲明一個(gè)指針,constexpr僅對(duì)指針有效,對(duì)它所指數(shù)據(jù)無關(guān);
constexpr函數(shù):指能用常量表達(dá)式的函數(shù);其返回類型和所有形參類型都是字面值類型,且函數(shù)體內(nèi)有且僅有一條return語句返回;
constexpr構(gòu)造函數(shù):構(gòu)造函數(shù)不能說是const,但字面值常量類構(gòu)造函數(shù)可以是constexpr。該構(gòu)造函數(shù)必須有一個(gè)空的函數(shù)體,所有的成員變量初始化放到初始化列表中進(jìn)行。
總結(jié):
1.const用于修飾不能被修改的對(duì)象,但const對(duì)象的值通常在程序運(yùn)行期間才能確定
2.constexpr用于修飾常量表達(dá)式或可返回常量表達(dá)式的constexpr函數(shù),在編譯時(shí)能確定值。
3.constexpr函數(shù)都是inline函數(shù)。
4、volatile關(guān)鍵字介紹
定義:該關(guān)鍵字與const對(duì)立,也是類型修飾符。主要用于修飾隨時(shí)變化的變量,與該變量相關(guān)的運(yùn)算不要進(jìn)行優(yōu)化編譯。每次直接從內(nèi)存中加載該變量的最新數(shù)據(jù)。
使用場合:在中斷服務(wù)程序和CPU相關(guān)寄存器的定義中使用。
5、sizeof的使用總結(jié)
解析:sizeof計(jì)算在棧中分配的內(nèi)存大?。籹izeof是一種操作運(yùn)算符,編譯期獲取值,strlen是函數(shù),需要運(yùn)行期才進(jìn)行計(jì)算。
注意點(diǎn):1)對(duì)于結(jié)構(gòu)體對(duì)象取長度,會(huì)存在對(duì)齊補(bǔ)位操作;2)對(duì)函數(shù)使用sizeof,在編譯階段會(huì)被函數(shù)的返回值類型所代替;
6、指針和引用的區(qū)別
解析:指針和引用均提供了間接操作對(duì)象的功能。
1)指針存放某個(gè)對(duì)象的地址,其本身也是變量,也擁有地址;所以可以有指向指針的指針,指針可變,包括其所指的地址的改變和指向地址所存數(shù)據(jù)的改變;
2)引用是變量別名,聲明時(shí)候必須初始化,之后建立綁定關(guān)系,不能改變;
3)不存在指向空值的引用,但是存在指向空值的指針;
4)指針之間存在類型轉(zhuǎn)換,引用分為const和非const引用,非const引用只能和同類型的對(duì)象綁定,const引用可以綁定到不同但相關(guān)的對(duì)象或者右值。
7、指針和數(shù)組的區(qū)別
解析:1)數(shù)組可以全局?jǐn)?shù)據(jù)域建立,也可以在棧上被創(chuàng)建;指針可以隨時(shí)指向任意類型的內(nèi)存塊;2)sizeof可以計(jì)算出數(shù)組的容量,但是sizeof指針,只能獲取指針的大??;3)數(shù)組作為函數(shù)的參數(shù)進(jìn)行傳遞時(shí)候,該數(shù)組自動(dòng)退化為同類型的指針。
8、空指針、野指針、懸垂指針和void指針
解析:空指針:指賦值為NULL或者0的指針;
野指針:指聲明后未初始化的指針;
懸垂指針:指經(jīng)過delete釋放后,繼續(xù)指向已被釋放內(nèi)存地址的指針;
void指針:無類型指針,被稱為通用指針或者泛指針,也被稱為萬能指針;使用時(shí)候需要恢復(fù)其指向?qū)ο箢愋汀?/p>
9、malloc/free和new/delete介紹
解析:malloc/free為標(biāo)準(zhǔn)庫函數(shù),new/delete是C++運(yùn)算符,可以被重載。
對(duì)于內(nèi)置數(shù)據(jù)類型,兩者可以通用;malloc申請(qǐng)內(nèi)存后不會(huì)初始化,在棧上申請(qǐng),返回void類型指針,使用時(shí)候還需要進(jìn)行類型轉(zhuǎn)換;new申請(qǐng)內(nèi)存時(shí)候有默認(rèn)初始化,也可以指定初始化,在堆上申請(qǐng)內(nèi)存,返回具體類型的指針。
對(duì)于c++中類對(duì)象初始化時(shí)候,由于需要調(diào)用構(gòu)造函數(shù),釋放時(shí)候需要調(diào)用析構(gòu)函數(shù),所以需要用new/delete對(duì)malloc/free進(jìn)行封裝,實(shí)現(xiàn)類對(duì)象的創(chuàng)建。
10、智能指針介紹
解析:智能指針是存儲(chǔ)指向動(dòng)態(tài)分配(堆)對(duì)象指針的類,用于生存期的控制,能夠確保在離開指針?biāo)谧饔糜驎r(shí),自動(dòng)地銷毀動(dòng)態(tài)分配的對(duì)象,防止內(nèi)存泄漏。智能指針的核心實(shí)現(xiàn)技術(shù)是引用計(jì)數(shù),每使用它一次,內(nèi)部引用計(jì)數(shù)加1,每析構(gòu)一次內(nèi)部的引用計(jì)數(shù)減1;減少為0時(shí),刪除所指向的堆內(nèi)存。
C++11中提供了三種智能指針,引用頭文件為
std::shared_ptr:共享的智能指針
std::unique_ptr:獨(dú)占的智能指針
std::weak_ptr:弱引用的智能指針,它不共享指針,不能操作資源,用來監(jiān)視shared_ptr。
詳解可以參照連接(87條消息) c++11之智能指針_峰上踏雪的博客-博客_智能指針
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
標(biāo)題名稱:c++知識(shí)問答1-創(chuàng)新互聯(lián)
文章路徑:http://jinyejixie.com/article46/eeheg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)、搜索引擎優(yōu)化、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容