最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++?函數(shù)的介紹

 更新時(shí)間:2021年12月08日 10:38:12   作者:一個(gè)熱愛(ài)學(xué)習(xí)的深度渣渣  
本篇主要介紹了函數(shù)的基礎(chǔ)概念以及一些特殊的函數(shù)方法和類(lèi)型,函數(shù)重載以及函數(shù)指針,下面一起進(jìn)入文章學(xué)習(xí)詳細(xì)的內(nèi)容吧,需要的朋友也可以參考一下

一、基礎(chǔ)

函數(shù):封裝了一段代碼,可以在一次執(zhí)行過(guò)程中被反復(fù)調(diào)用,包含函數(shù)頭和函數(shù)體;

函數(shù)頭:

  • 函數(shù)名稱(chēng)(標(biāo)識(shí)符),用于后續(xù)的調(diào)用;
  • 形式參數(shù),代表函數(shù)的輸入?yún)?shù);
  • 返回類(lèi)型,函數(shù)執(zhí)行完成后返回結(jié)果的類(lèi)型;

函數(shù)體:一個(gè)語(yǔ)句塊(block),包含具體的計(jì)算邏輯;

函數(shù)的聲明與定義:

  • 函數(shù)聲明只包含函數(shù)頭,不包含函數(shù)體,通常在頭文件中;
  • 函數(shù)聲明可以出現(xiàn)多次,定義通常出現(xiàn)一次(也有例外);

函數(shù)調(diào)用:

  • 需要提供函數(shù)名與實(shí)際參數(shù);
  • 實(shí)際參數(shù)拷貝初始化給形式參數(shù);
  • 返回值會(huì)拷貝給函數(shù)的調(diào)用者;
  • 棧幀結(jié)構(gòu)(可自行了解下);

二、參數(shù)

對(duì)于非模板函數(shù)來(lái)說(shuō),其每個(gè)形參都有確定的類(lèi)型,但形參可以沒(méi)有名稱(chēng);

實(shí)參到形參的拷貝順序是不確定的;

函數(shù)的形參的傳遞一般分為:傳值、傳址、傳引用;

變長(zhǎng)參數(shù)的定義:

1、使用initializer_list傳遞

#include <initializer_list>
void fun(std::initializer_list<int> a){}

int main
{
 fun({1, 2, 3, 4})
}

注意:該方法只能傳遞類(lèi)型相同的變長(zhǎng)參數(shù);

  • 可變長(zhǎng)度模板參數(shù)
  • 使用省略號(hào)表示形式參數(shù)(一般不使用)

函數(shù)的缺省實(shí)參注意點(diǎn):

1、如果某個(gè)形參具有缺省參數(shù),那么它右側(cè)的形參都必須具有缺省實(shí)參;

void fun(int x=1, int y=2){} // 這里y必須給定缺省值


2、具有缺省實(shí)參的函數(shù)調(diào)用時(shí),傳入實(shí)參按照從左到右的順序進(jìn)行匹配;

3、在一個(gè)翻譯單元中,每個(gè)形參的缺省實(shí)參只能定義一次;

4、缺省實(shí)參為對(duì)象時(shí),實(shí)參的缺省值會(huì)隨對(duì)象值的變化而變化;

main函數(shù)的版本:

  • 無(wú)形參版本(一般使用)
  • 帶形參版本
int main(int argc, char *argv[]) {}

argc是非負(fù)數(shù),表述傳入?yún)?shù)個(gè)數(shù),argv是一個(gè)指針指向傳輸參數(shù)的數(shù)組頭。

三、返回類(lèi)型

返回類(lèi)型的幾種書(shū)寫(xiě)方式:

經(jīng)典方法:位于函數(shù)頭的前部,也是最常規(guī)的寫(xiě)法;

C++11引入的方式:位于函數(shù)頭的尾部;

auto fun(int x) -> int
{
 return x*2;
}

C++14引入的方式:返回類(lèi)型的自動(dòng)推導(dǎo);

auto fun(int a)
{
 return a;  // 會(huì)根據(jù)return語(yǔ)句進(jìn)行推導(dǎo)
}

四、函數(shù)重載與解析

函數(shù)重載:使用相同的函數(shù)名定義多個(gè)函數(shù),每個(gè)函數(shù)具有不同的參數(shù)列表;

注意:不能基于不同的返回類(lèi)型進(jìn)行重載;

名稱(chēng)查找:

  • 分為限定查找和非限定查找:有無(wú)限定在某個(gè)作用域中;
  • 非限定查找會(huì)進(jìn)行域的逐級(jí)查找——名稱(chēng)隱藏;
  • 查找通常只會(huì)在已聲明的名稱(chēng)集合中進(jìn)行;

重載解析:在名稱(chēng)查找的基礎(chǔ)上進(jìn)一步選擇合適的調(diào)用函數(shù);

  • 過(guò)濾不能被調(diào)用的版本:參數(shù)個(gè)數(shù)不對(duì)、無(wú)法將實(shí)參轉(zhuǎn)為形參、實(shí)參不滿足形參的限制條件;

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

定義:將比較簡(jiǎn)單的函數(shù)邏輯展開(kāi)到調(diào)用函數(shù)的部分,避免棧幀銷(xiāo)毀,提升性能;

關(guān)鍵字:inline,如果一個(gè)函數(shù)在多個(gè)翻譯單元展開(kāi),加入這個(gè)關(guān)鍵字可以避免重復(fù)定義;

1.constexpr函數(shù)

定義:之前有介紹常量表達(dá)式時(shí)用到了該關(guān)鍵字,現(xiàn)在對(duì)于函數(shù)也可以用該關(guān)鍵字;

作用:使得函數(shù)在編譯器被執(zhí)行,當(dāng)然在有變量情況下也可在運(yùn)行期執(zhí)行;

constexpr int fun(int x){
    // int y; std::cin >> y;  會(huì)報(bào)錯(cuò),該語(yǔ)句需要用戶傳入?yún)?shù),只能在運(yùn)行期執(zhí)行
 return x * 2;
}

int main
{
 constexpr int x = fun(2);  // 編譯器會(huì)翻譯成 move eax 4, 去掉constexpr也可以
 return x;
}

注意:constexpr函數(shù)中的語(yǔ)句必須是可以在編譯器執(zhí)行的語(yǔ)句;

拓展:關(guān)鍵字consteval(C++20引入),函數(shù)只能在編譯器執(zhí)行;

六、函數(shù)指針

作用:可以用于高階函數(shù)中,將函數(shù)指針作為參數(shù);

代碼案例:

int add(x) { return x + 1};
using T = int(int);
int fun(K* F, int x)
{
 int tmp = (*F)(x);
 return tmp * 2;
}

int main
{
 std::cout << fun(&add, 50) << std::endl;
}

說(shuō)明:這就是用函數(shù)指針定義的一個(gè)高階函數(shù),在之后的很多高階函數(shù)、泛型算法中也是這樣的用法;

注意:當(dāng)函數(shù)對(duì)象進(jìn)行賦值或者返回值時(shí),返回的是一個(gè)函數(shù)指針類(lèi)型的對(duì)象;

七、思考

1、我們常常會(huì)見(jiàn)到如下代碼,是由什么作用?

extern "C" 
int fun(int x, int y)
{
    return x + y;
}

C語(yǔ)言對(duì)于函數(shù)是不能重載的,當(dāng)用C調(diào)用C++程序時(shí),往往找不到C++編譯后的函數(shù)名,可通過(guò)如上代碼定義一個(gè)函數(shù)為C類(lèi)型函數(shù);

2、可以用別名定義一個(gè)函數(shù)類(lèi)型嗎?

using X = int[3];
X a;    // 這是定義了一個(gè)數(shù)組,同int a[3]

using X = int(int);
X fun;    // 這是定義了一個(gè)int返回類(lèi)型的函數(shù)

函數(shù)也是有類(lèi)型的,可以用別名定義,并且函數(shù)類(lèi)型不包含形參名稱(chēng),并且只能聲明,不能定義;

總結(jié):

本篇主要介紹了函數(shù)的基礎(chǔ)概念以及一些特殊的函數(shù)方法和類(lèi)型。重點(diǎn)需要注意的就是函數(shù)重載以及函數(shù)指針,這個(gè)在后續(xù)的模板以及泛型編程都會(huì)用到;下一篇將討論C++中的內(nèi)存,也是最重要的一個(gè)部分。

到此這篇關(guān)于C++ 函數(shù)的介紹的文章就介紹到這了,更多相關(guān)C++函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • OpenSSL使用AES實(shí)現(xiàn)文件加解密功能

    OpenSSL使用AES實(shí)現(xiàn)文件加解密功能

    AES是一種對(duì)稱(chēng)加密算法,它是目前廣泛使用的加密算法之一,意味著加密和解密使用相同的密鑰,這就要求密鑰的安全性非常重要,因?yàn)槿魏螕碛忻荑€的人都能進(jìn)行加密和解密操作,本文給大家介紹了OpenSSL如何使用AES實(shí)現(xiàn)文件加解密功能,需要的朋友可以參考下
    2023-11-11
  • C++實(shí)用庫(kù)之DNS解析的實(shí)現(xiàn)

    C++實(shí)用庫(kù)之DNS解析的實(shí)現(xiàn)

    DNS解析是一種將域名轉(zhuǎn)換為相應(yīng)的IP地址的過(guò)程,本文主要介紹了C++實(shí)用庫(kù)之DNS解析的實(shí)現(xiàn),實(shí)現(xiàn)了快速、準(zhǔn)確的域名到IP地址的轉(zhuǎn)換,感興趣的可以了解一下
    2025-03-03
  • C++基礎(chǔ) class、struct、union詳細(xì)

    C++基礎(chǔ) class、struct、union詳細(xì)

    這篇文章主要 給大家介紹的是C++基礎(chǔ) class、struct、union,主要由三部分組成,分別是、類(lèi)class、結(jié)構(gòu)體struct、共用體union,需要的朋友可以參考一下
    2021-09-09
  • C語(yǔ)言中find_package()的搜索路徑的實(shí)現(xiàn)

    C語(yǔ)言中find_package()的搜索路徑的實(shí)現(xiàn)

    本文主要介紹了C語(yǔ)言中find_package()的搜索路徑的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 使用VC6.0對(duì)C語(yǔ)言程序進(jìn)行調(diào)試的基本手段分享

    使用VC6.0對(duì)C語(yǔ)言程序進(jìn)行調(diào)試的基本手段分享

    這篇文章主要介紹了用VC6.0開(kāi)發(fā)c語(yǔ)言程序的時(shí)候調(diào)試代碼的一些小技巧,需要的朋友可以參考下
    2013-07-07
  • c語(yǔ)言壓縮文件詳細(xì)講解

    c語(yǔ)言壓縮文件詳細(xì)講解

    這篇文章主要從單文件壓縮、多文件壓縮、多文件異步壓縮講訴了c語(yǔ)言壓縮文件,需要的朋友可以參考下面具體的文章內(nèi)容
    2021-09-09
  • C語(yǔ)言回溯法 實(shí)現(xiàn)組合數(shù) 從N個(gè)數(shù)中選擇M個(gè)數(shù)

    C語(yǔ)言回溯法 實(shí)現(xiàn)組合數(shù) 從N個(gè)數(shù)中選擇M個(gè)數(shù)

    在平時(shí)的算法的題目中,時(shí)常會(huì)遇到組合數(shù)相關(guān)的問(wèn)題,暴力枚舉。在N個(gè)數(shù)中挑選M個(gè)數(shù)出來(lái)。利用for循環(huán)也可以處理,但是可拓展性不強(qiáng),于是寫(xiě)這個(gè)模板供以后參考
    2018-08-08
  • 深入C++ 函數(shù)映射的使用詳解

    深入C++ 函數(shù)映射的使用詳解

    我比較喜歡用代碼結(jié)合實(shí)際來(lái)講解,下面我將以一段事例代碼來(lái)講解如何使用這幾種映射
    2013-07-07
  • c++實(shí)現(xiàn)md5加密的代碼

    c++實(shí)現(xiàn)md5加密的代碼

    這篇文章主要介紹了c++實(shí)現(xiàn)md5加密的實(shí)例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • C語(yǔ)言進(jìn)階教程之預(yù)處理

    C語(yǔ)言進(jìn)階教程之預(yù)處理

    C語(yǔ)言提供了多種預(yù)處理功能,如宏定義、文件包含、條件編譯等,下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言進(jìn)階教程之預(yù)處理的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02

最新評(píng)論

理塘县| 宜兰县| 磴口县| 旅游| 阳谷县| 天气| 呼和浩特市| 蓬安县| 和田市| 正镶白旗| 水城县| 资阳市| 禄劝| 五峰| 汽车| 库车县| 都江堰市| 鄯善县| 彭水| 阿拉善右旗| 厦门市| 深州市| 黄大仙区| 延安市| 绵阳市| 蓬莱市| 营口市| 昭觉县| 富裕县| 太谷县| 勐海县| 永兴县| 哈尔滨市| 斗六市| 张家界市| 牙克石市| 邢台县| 德江县| 偏关县| 永昌县| 扬州市|