国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - C/C++ - C++ 函數的介紹

C++ 函數的介紹

2022-03-10 14:41一個熱愛學習的深度渣渣 C/C++

本篇主要介紹了函數的基礎概念以及一些特殊的函數方法和類型,函數重載以及函數指針,下面一起進入文章學習詳細的內容吧,需要的朋友也可以參考一下

一、基礎

函數:封裝了一段代碼,可以在一次執行過程中被反復調用,包含函數頭和函數體;

函數頭:

  • 函數名稱(標識符),用于后續的調用;
  • 形式參數,代表函數的輸入參數;
  • 返回類型,函數執行完成后返回結果的類型;

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

函數的聲明與定義:

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

函數調用:

  • 需要提供函數名與實際參數;
  • 實際參數拷貝初始化給形式參數;
  • 返回值會拷貝給函數的調用者;
  • 棧幀結構(可自行了解下);

二、參數

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

實參到形參的拷貝順序是不確定的;

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

變長參數的定義:

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})
}

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

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

函數的缺省實參注意點:

1、如果某個形參具有缺省參數,那么它右側的形參都必須具有缺省實參;

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

2、具有缺省實參的函數調用時,傳入實參按照從左到右的順序進行匹配;

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

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

main函數的版本:

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

argc是非負數,表述傳入參數個數,argv是一個指針指向傳輸參數的數組頭。

三、返回類型

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

經典方法:位于函數頭的前部,也是最常規的寫法;

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

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

C++14引入的方式:返回類型的自動推導;

?
1
2
3
4
auto fun(int a)
{
 return a;  // 會根據return語句進行推導
}

四、函數重載與解析

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

注意:不能基于不同的返回類型進行重載;

名稱查找:

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

重載解析:在名稱查找的基礎上進一步選擇合適的調用函數;

  • 過濾不能被調用的版本:參數個數不對、無法將實參轉為形參、實參不滿足形參的限制條件;

五、內聯函數

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

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

1.constexpr函數

定義:之前有介紹常量表達式時用到了該關鍵字,現在對于函數也可以用該關鍵字;

作用:使得函數在編譯器被執行,當然在有變量情況下也可在運行期執行;

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

注意:constexpr函數中的語句必須是可以在編譯器執行的語句;

拓展:關鍵字consteval(C++20引入),函數只能在編譯器執行;

六、函數指針

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

代碼案例:

?
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;
}

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

注意:當函數對象進行賦值或者返回值時,返回的是一個函數指針類型的對象;

七、思考

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

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

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

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

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

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

總結:

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

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

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

延伸 · 閱讀

精彩推薦
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
主站蜘蛛池模板: 欧美精品一区三区 | 老妇60一区二区三区 | av大全在线观看 | 色欧美片视频在线观看 | 天天操天天操 | 亚洲日本va中文字幕 | 欧美精三区欧美精三区 | 色毛片 | 国产精品久久久久久久久久妞妞 | 一 级 黄 色 片免费网站 | 91中文在线 | 亚洲成人第一网站 | 成人免费黄色片 | 国内免费自拍视频 | 国产精品第一页在线 | 91精品久久久久久久久久久久久久久 | 亚洲国产精品久久久久久6q | 91精品秘密在线观看 | 国产精品尤物麻豆一区二区三区 | 亚洲卡一 | 欧美久久久久久久久久久久久久 | 欧美一级特黄在线观看 | 国产精品久久久久久久7电影 | 国产一区二区精品在线观看 | 精品久久久久久 | 亚洲一区二区中文字幕 | 亚洲三级在线 | 成人av小说 | 热精品 | 国产精品成人一区二区 | 国产免费成人 | 免费在线毛片 | 欧美一级在线 | 精品国精品国产自在久不卡 | 天堂一区二区三区 | 亚洲精品久久久久久国产精华液 | 二区三区在线观看 | 久久久国产视频 | 日本不卡一区二区 | 成人精品影院 | 日本精品国产 |