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