亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++中的函數(shù)知識點大全

 更新時間:2022年04月10日 14:42:24   作者:Oten  
這篇文章介紹了C++中的函數(shù)知識點,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

(一)函數(shù)使用規(guī)則

  1. 函數(shù)的定義不能嵌套但調(diào)用可以嵌套

  2. 在函數(shù)調(diào)用時,如某一默認參數(shù)要指明一個特定值,則有其之前所有參數(shù)都必須賦值

  3. 賦默認實參時 一旦某個形參被賦予了默認值,它后面的所有形參都必須有默認值,因為設置默認參數(shù)的順序是自右向左;且注意默認值不可以是局部變量

  4. 函數(shù)參數(shù)的默認值可以是表達式

  5. 如果在函數(shù)定義時設置了默認參數(shù),則就不能在函數(shù)聲明時再次設置,反之亦然

  6. 函數(shù)只有一個 返回值,除void類型函數(shù)

  7. 函數(shù)調(diào)用可以出現(xiàn)在執(zhí)行語句中,也可以出現(xiàn)在表達式中,甚至還可以作為一個函數(shù)的實參,但不可作為函數(shù)的形參,因為函數(shù)返回值存在寄存器中, 沒有地址, 不能作為形參

  8. 函數(shù)是一種特殊的數(shù)據(jù)類型,正確

  9. 當函數(shù)不是void類型且函數(shù)體內(nèi)沒有return語句時,此時函數(shù)的返回值與返回類型相同但內(nèi)容卻是隨機的一個值

  10. C++所有的函數(shù)本質(zhì)上都是外部函數(shù)(可延申至其他文件中使用),故extern關鍵字可省略

  11. 如果函數(shù)的形參是指向普通變量的指針變量,實參只能用指向普通變量的指針,不能用指向const變量的指針,反之則都可以用

  12. 當函數(shù)自變量個數(shù)不確定時,系統(tǒng)不自動檢測自變量

  • 函數(shù)三種傳參:

① 值傳遞:會為形參重新分配內(nèi)存空間 ,將實參的值拷貝給形參,形參的改變不會影響實參的值,函數(shù)被調(diào)用結(jié)束后,形參被釋放。

② 地址的傳遞:形參為指針變量,將實參的地址傳遞給函數(shù),可以在函數(shù)中改變實參的值。調(diào)用時為形參指針變量分配內(nèi)存,結(jié)束時釋放指針變量。

③ 引用傳遞:不會為形參重新分配內(nèi)存空間,形參只是實參的別名,形參的改變只會影響實參的值,函數(shù)調(diào)用結(jié)束后,形參不會被釋放。

(二)函數(shù)的使用

  • 建立自定義函數(shù),調(diào)用時只需要明白函數(shù)的功能即可,故提高了程序的可讀性

  • sizeof 返回的值表示的含義如下(單位字節(jié)):

? 數(shù)組 —— 編譯時分配的數(shù)組空間大??;
? 指針 —— 存儲該指針所用的空間大?。ù鎯υ撝羔樀牡刂返拈L度,是長整型,應該為 4 );
? 類型 —— 該類型所占的空間大小;
? 對象 —— 對象的實際占用空間大??;

? 函數(shù) —— 函數(shù)的返回類型所占的空間大小。函數(shù)的返回類型不能是 void

  • sizeof(float)是(整型)類型表達式

  • Math.floor() 表示向下取整,返回double類型

? Math.ceil() 表示向上取整,返回double類型

? Math.round() 四舍五入,返回int類型

  • 用戶可以重載(不能重定義)標準庫函數(shù),若如此,該函數(shù)將失去原有含義;但若已包含標準庫頭文件及相關命名空間,則系統(tǒng)不允許用戶重新定義標準庫函數(shù),因為兩個相同作用域內(nèi)的函數(shù) 如果除了返回值類型外 的函數(shù)要素都相同 那么編譯器會報重定義錯誤

  • 函數(shù)返回值作為右值,被const修飾無效,故此時const相當于沒修飾

  • 如果參數(shù)類型不一致,則函數(shù)調(diào)用時按形參類型隱式類型轉(zhuǎn)換實參

  • main函數(shù)默認返回一個int類型的值

  • 將一個字符串傳遞到函數(shù)中,傳遞的是地址,則函數(shù)形參既可以用字符數(shù)組,又可以用指針變量

  • 函數(shù)的返回值可以是引用類型且函數(shù)返回引用可以作為左值

  • 函數(shù)的返回類型可以是結(jié)構(gòu)體類型,這時函數(shù)將返回一個結(jié)構(gòu)體對象

  • 所有的函數(shù)在定義它的程序中都是可見的

(三)預處理命令(包括宏定義)

  • 預處理命令行不能以分號結(jié)尾

  • 預處理命令行可以出現(xiàn)在程序的最后一行

  • 預處理命令行作用域是從出現(xiàn)位置開始到源程序文件末尾

  • 凡是以#號開頭的行,不一定都為編譯預處理命令行

  • 在源文件的一行上不可以有多條預處理命令

  • 預處理不做語法檢查

  • C++在編譯前由預處理器對預處理命令進行處理(故在編譯前被執(zhí)行),編譯時進行語法分析

  • 宏替換不占用程序的運行時間,只占編譯時間

(四)內(nèi)聯(lián)函數(shù)與宏的區(qū)別

  • 內(nèi)聯(lián)函數(shù)在運行時可調(diào)試,而宏定義不可以;
  • 編譯器會對內(nèi)聯(lián)函數(shù)的參數(shù)類型做安全檢查或自動類型轉(zhuǎn)換(同普通函數(shù)),而宏定義則不會;
  • 內(nèi)聯(lián)函數(shù)可以訪問類的成員變量,宏定義則不能;
  • 在類中聲明同時定義的成員函數(shù),自動轉(zhuǎn)化為內(nèi)聯(lián)函數(shù)。

(五)函數(shù)與宏的區(qū)別

  • 宏做的是簡單的字符串替換(注意是字符串的替換,不是其他類型參數(shù)的替換),而函數(shù)的參數(shù)的傳遞,參數(shù)是有數(shù)據(jù)類型的,可以是各種各樣的類型.

  • 宏的參數(shù)替換是不經(jīng)計算而直接處理的,而函數(shù)調(diào)用是將實參的值傳遞給形參,既然說是值,自然是計算得來的.

  • 宏在編譯之前進行,即先用宏體替換宏名,然后再編譯的,而函數(shù)顯然是編譯之后,在執(zhí)行時,才調(diào)用的.因此,宏占用的是編譯的時間,而函數(shù)占用的是執(zhí)行時的時間.

  • 宏的參數(shù)是不占內(nèi)存空間的,因為只是做字符串的替換,而函數(shù)調(diào)用時的參數(shù)傳遞則是具體變量之間的信息傳遞,形參作為函數(shù)的局部變量,顯然是占用內(nèi)存的.

  • 函數(shù)的調(diào)用是需要付出一定的時空開銷的,因為系統(tǒng)在調(diào)用函數(shù)時,要保留現(xiàn)場,然后轉(zhuǎn)入被調(diào)用函數(shù)去執(zhí)行,調(diào)用完,再返回主調(diào)函數(shù),此時再恢復現(xiàn)場,這些操作,顯然在宏中是沒有的.

  • 宏替換不占用程序的運行時間

  • 宏與類型無關,但是c++中函數(shù)必須指定返回類型,故宏可以做函數(shù)不能做的事

(六)函數(shù)模板

1.函數(shù)模板的格式如下:

Template <class 形參名,class 形參名,......> 返回類型函數(shù)名(參數(shù)列表){函數(shù)體}

其中,class可以用typename關鍵字代替

2.函數(shù)模板調(diào)用時不需要顯式指定類型,系統(tǒng)自動匹配參數(shù)類型,若沒有合適的,會進行報錯。而類模板使用需要顯式指定類型,且對于函數(shù)模板注意要返回值和參數(shù)的類型一致

3.模板函數(shù)和普通函數(shù)都符合條件時,優(yōu)先執(zhí)行普通函數(shù)

4.模板特化:(當函數(shù)模板需要對某些類型進行特化處理,稱為函數(shù)模板的特化,類模板的特化同理)

  • ① 因為很多時候,我們既需要一個模板能應對各種情形,又需要它對于某個特定的類型有著特別的處理,故出現(xiàn)了模板特化
  • ① 特化整體上分為全特化和偏特化
  • ② 全特化:就是模板中模板參數(shù)全被指定為確定的類型。 全特化也就是定義了一個全新的類型,全特化的類中的函數(shù)可以與模板類不一樣
  • ③ 偏特化:模板中的模板參數(shù)沒有被全部確定,需要編譯器在編譯時進行確定
  • ④ 對主版本模板類、全特化類、偏特化類的調(diào)用優(yōu)先級從高到低進行排序是:全特化類>偏特化類>主版本模板類
  • ⑤ 當函數(shù)調(diào)用發(fā)現(xiàn)有特化后的匹配函數(shù)時,會優(yōu)先調(diào)用特化的函數(shù),而不再通過函數(shù)模版來進行實例化
  • ⑥ 模板特化相當于在聲明了類模板等后聲明需要模板特化然后讓接下來的代碼自己使用一個類型,故不能單獨使用,例;![img](file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps386C.tmp.jpg)

5. 模板特化實現(xiàn):template<> + 完全和模板類型沒有一點關系的類實現(xiàn)或者函數(shù)定義;

  • ① 特化為絕對類型(全特化):例:template<>class Compare{...}; // 特化為float類型,此為函數(shù)模板特化;函數(shù)模板只能全特化,沒有偏特化
  • ② 特化為引用,指針類型(半特化、偏特化):例:template struct iterator_traits<_Tp*> {};
  • ③ 特化為另外一個類模板(偏特化):例:template class Compare<vector>{};

6. 類模板的成員函數(shù)都是函數(shù)模板;沒使用過的成員函數(shù)(即函數(shù)模板)不會被實例化

7. 函數(shù)模板必須由程序員實例化為可執(zhí)行的函數(shù)

8. 函數(shù)模板的虛擬類型名是在編譯階段確定實際類型的

(七)函數(shù)重載

  • 使用重載函數(shù)編程序的目的是:使用相同的函數(shù)名調(diào)用功能相似的函數(shù);使用方便,提高可讀性

  • 重載函數(shù)的形參(個數(shù)或類型)必須不同

  • void x(int,char ch=’a’)與void x(int)可以在同一程序中定義,但不可以重載

(八)內(nèi)聯(lián)函數(shù)

內(nèi)聯(lián)(置)函數(shù)inline:

引入內(nèi)聯(lián)函數(shù)的目的是為了解決程序中函數(shù)調(diào)用的效率問題;程序在編譯器編譯的時候,編譯器將程序中出現(xiàn)的內(nèi)聯(lián)函數(shù)的調(diào)用表達式用內(nèi)聯(lián)函數(shù)的函數(shù)體進行替換,而對于其他的函數(shù),都是在運行時候才被替代。這其實就是個空間代價換時間的節(jié)?。ū祝捍a被多次復制,增加了代碼量,占用更多的內(nèi)存空間),故在當函數(shù)代碼較小并且被頻繁調(diào)用的時候。在使用內(nèi)聯(lián)函數(shù)時要留神:

① 使用基類指針或引用來調(diào)用虛函數(shù)時,它都不能為內(nèi)聯(lián)函數(shù)(因為調(diào)用發(fā)生在運行時)。但是,使用類的對象(不是指針或引用)來調(diào)用時,可以當做是內(nèi)聯(lián),因為編譯器在編譯時確切知道對象是哪個類的

② 默認情況下,在類體中定義的成員函數(shù)若不包括循環(huán)等控制結(jié)構(gòu),符合內(nèi)聯(lián)函數(shù)要求時,C++會自動將它們作為內(nèi)聯(lián)函數(shù)處理(不是所有成員函數(shù)都是內(nèi)聯(lián)函數(shù))

③ 內(nèi)聯(lián)函數(shù)在編譯時是將該函數(shù)的目標代碼插入每個調(diào)用該函數(shù)的地方,不是運行時

④ 內(nèi)聯(lián)函數(shù)在編譯時做參數(shù)類型檢查

⑤ 在內(nèi)聯(lián)函數(shù)中不允許使用循環(huán)語句(for,while)和switch結(jié)果,帶有異常接口聲明的函數(shù)也不能聲明為內(nèi)聯(lián)函數(shù)。另外,遞歸函數(shù)(自己調(diào)用自己的函數(shù))是不能被用來做內(nèi)聯(lián)函數(shù)的。內(nèi)聯(lián)函數(shù)只適合于只有1~5行的小函數(shù)

⑥ 內(nèi)聯(lián)函數(shù)的定義必須出現(xiàn)在內(nèi)聯(lián)函數(shù)第一次調(diào)用之前

⑦ 定義內(nèi)聯(lián)函數(shù)inline寫類型前面

⑧ 關鍵字inline 必須與函數(shù)定義體放在一起才能使函數(shù)成為內(nèi)聯(lián),僅將inline 放在函數(shù)聲明前面不起任何作用

⑨ 如果在類外定義inline函數(shù),則必須將類定義和成員函數(shù)定義放在同一頭文件中,否則編譯時無法進行置換

⑩ 頭文件中不僅要包含 inline 函數(shù)的聲明,而且必須包含定義,且在定義時必須加上 inline

? 不管是 class 聲明中定義的 inline 函數(shù),還是 class 實現(xiàn)中定義的 inline 函數(shù),不存在優(yōu)先不優(yōu)先的問題

? 內(nèi)置函數(shù)不需要使用堆棧進行現(xiàn)場的保護與恢復

? 用 inline 修飾的函數(shù)原型其對應的函數(shù)也將成為內(nèi)聯(lián)函數(shù) - 錯(自己理解:inline為建議型關鍵字)

? 內(nèi)聯(lián)函數(shù)可以是靜態(tài)的

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C語言 sockaddr和sockaddr_in案例詳解

    C語言 sockaddr和sockaddr_in案例詳解

    這篇文章主要介紹了C語言 sockaddr和sockaddr_in案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 重學c/c++之數(shù)據(jù)存儲詳解(整數(shù)、浮點數(shù))

    重學c/c++之數(shù)據(jù)存儲詳解(整數(shù)、浮點數(shù))

    C語言給定了一些基本的數(shù)據(jù)類型,下面這篇文章主要給大家介紹了關于重學c/c++之數(shù)據(jù)存儲(整數(shù)、浮點數(shù))的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-11-11
  • C語言 深入講解條件編譯的用處

    C語言 深入講解條件編譯的用處

    C語言提供了條件編譯的語法,就是在編譯源碼的時候,可以選擇性地編譯指定的代碼。例如我們開發(fā)一個兼容windows系統(tǒng)和linux系統(tǒng)運行的項目,那么,一些與操作系統(tǒng)密切相關的代碼,就需要進行選擇性編譯
    2022-04-04
  • openCV實現(xiàn)圖像分割

    openCV實現(xiàn)圖像分割

    這篇文章主要為大家詳細介紹了openCV實現(xiàn)圖像分割,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C++11標準庫bind函數(shù)應用教程

    C++11標準庫bind函數(shù)應用教程

    bind函數(shù)定義在頭文件functional中,可以將bind函數(shù)看做成一個通用的函數(shù)適配器,他接收一個可調(diào)用對象,生成一個新的可調(diào)用對象來"適應"原對象的參數(shù)列表。本文將帶大家詳細了解一下bind函數(shù)的應用詳解
    2021-12-12
  • 超詳細分析C語言動態(tài)內(nèi)存管理問題

    超詳細分析C語言動態(tài)內(nèi)存管理問題

    動態(tài)內(nèi)存是相對靜態(tài)內(nèi)存而言的。所謂動態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文帶你深入探究C語言中動態(tài)內(nèi)存的管理
    2022-04-04
  • VSCode配置C/C++并添加非工作區(qū)頭文件的方法

    VSCode配置C/C++并添加非工作區(qū)頭文件的方法

    這篇文章主要介紹了VSCode配置C/C++并添加非工作區(qū)頭文件的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • C語言中的sizeof操作符用法及和strlen的區(qū)別

    C語言中的sizeof操作符用法及和strlen的區(qū)別

    這篇文章主要介紹了C語言中的sizeof操作符用法及和strlen的區(qū)別,本文講解了sizeof的定義、sizeof的語法以及使用實例,最后給出sizeof與strlen的區(qū)別,需要的朋友可以參考下
    2015-07-07
  • C語言的遞歸思想實例分析

    C語言的遞歸思想實例分析

    這篇文章主要介紹了C語言的遞歸思想,以一個實例的形式針對數(shù)據(jù)變化規(guī)律分析了遞歸思想的本質(zhì),需要的朋友可以參考下
    2014-09-09
  • C/C++ 常用排序算法整理匯總分享

    C/C++ 常用排序算法整理匯總分享

    排序算法,就是如何使得記錄按照要求排列的方法。排序算法在很多領域得到相當?shù)刂匾?,尤其是在大量?shù)據(jù)的處理方面。一個優(yōu)秀的算法可以節(jié)省大量的資源。本篇整理了c語言和c++的常用的排序算法,感興趣的朋友可以參考下
    2021-06-06

最新評論