激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - C/C++ - C++ 函數(shù)的介紹

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

2022-03-10 14:41一個熱愛學(xué)習(xí)的深度渣渣 C/C++

本篇主要介紹了函數(shù)的基礎(chǔ)概念以及一些特殊的函數(shù)方法和類型,函數(shù)重載以及函數(shù)指針,下面一起進(jìn)入文章學(xué)習(xí)詳細(xì)的內(nèi)容吧,需要的朋友也可以參考一下

一、基礎(chǔ)

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

函數(shù)頭:

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

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

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

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

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

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

二、參數(shù)

對于非模板函數(shù)來說,其每個形參都有確定的類型,但形參可以沒有名稱;

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

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

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

1、使用initializer_list傳遞

?
1
2
3
4
5
6
7
#include <initializer_list>
void fun(std::initializer_list<int> a){}
 
int main
{
 fun({1, 2, 3, 4})
}

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

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

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

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

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

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

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

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

main函數(shù)的版本:

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

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

三、返回類型

返回類型的幾種書寫方式:

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

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

?
1
2
3
4
auto fun(int x) -> int
{
 return x*2;
}

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

?
1
2
3
4
auto fun(int a)
{
 return a;  // 會根據(jù)return語句進(jìn)行推導(dǎo)
}

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

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

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

名稱查找:

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

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

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

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

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

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

1.constexpr函數(shù)

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

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

?
1
2
3
4
5
6
7
8
9
10
constexpr int fun(int x){
    // int y; std::cin >> y;  會報(bào)錯,該語句需要用戶傳入?yún)?shù),只能在運(yùn)行期執(zhí)行
 return x * 2;
}
 
int main
{
 constexpr int x = fun(2);  // 編譯器會翻譯成 move eax 4, 去掉constexpr也可以
 return x;
}

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

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

六、函數(shù)指針

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

代碼案例:

?
1
2
3
4
5
6
7
8
9
10
11
12
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;
}

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

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

七、思考

1、我們常常會見到如下代碼,是由什么作用?

?
1
2
3
4
5
extern "C"
int fun(int x, int y)
{
    return x + y;
}

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

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

?
1
2
3
4
5
using X = int[3];
X a;    // 這是定義了一個數(shù)組,同int a[3]
 
using X = int(int);
X fun;    // 這是定義了一個int返回類型的函數(shù)

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

總結(jié):

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

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

原文鏈接:https://blog.csdn.net/weixin_40620310/article/details/121600420

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 一级成人欧美一区在线观看 | 黑人一级片视频 | 久久久久久久久久美女 | 一本色道久久综合亚洲精品小说 | 久久精品视频免费观看 | 欧美成人免费tv在线播放 | 中文字幕一区在线观看视频 | h视频在线免费观看 | 成人短视频在线观看 | 久久av一区二区 | 日韩在线高清 | 日韩理论电影网 | 中文字幕爱爱视频 | 蜜桃视频网站在线观看 | 国产一区二区三区在线视频 | 91精品视频在线看 | 狠狠操视频网站 | 羞羞视频免费网站日本动漫 | 一本在线高清码电影 | 中国国语毛片免费观看视频 | 蜜桃传媒视频麻豆第一区免费观看 | 亚洲一区二区三区视频 | 欧美在线观看视频一区二区 | 国产无区一区二区三麻豆 | 亚洲国产成人久久成人52 | 色婷婷久久久亚洲一区二区三区 | 精品一区二区三区毛片 | 国产69精品99久久久久久宅男 | 污视频在线免费播放 | 一区国产视频 | 久久夜视频 | 一级黄色大片在线观看 | 欧美亚洲啪啪 | 爱福利视频网 | av在线直播观看 | 亚洲国产美女视频 | 亚洲第一精品在线 | 久草视频2 | 成人免费在线视频播放 | 九一传媒在线观看 | 欧美一级电影在线观看 |