亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++中函數(shù)使用的基本知識學習教程

2020-05-23 14:10:01
字體:
供稿:網(wǎng)友
這篇文章主要介紹了C++中函數(shù)使用的基本知識學習教程,涵蓋了函數(shù)的聲明和參數(shù)以及指針等各個方面的知識,非常全面,需要的朋友可以參考下
 

函數(shù)是執(zhí)行某種操作的代碼塊。函數(shù)可以選擇性地定義使調(diào)用方可以將實參傳遞到函數(shù)中的輸入形參。函數(shù)可以選擇性地返回值作為輸出。函數(shù)可用于在單個可重用塊中封裝常用操作(理想情況是使用可清晰地描述函數(shù)行為的名稱)。以下函數(shù)從調(diào)用方接受兩個整數(shù)并返回其總和;a 和 b 是 int 類型的參數(shù)。

int sum(int a, int b){  return a + b;}

可以從程序中任意數(shù)量的位置調(diào)用函數(shù)。傳遞給函數(shù)的值是實參,其類型必須與函數(shù)定義中的形參類型兼容。

int main(){  int i = sum(10, 32);  int j = sum(i, 66);  cout << "The value of j is" << j << endl; // 108}

對于函數(shù)長度沒有實際限制,不過良好的設(shè)計應(yīng)以執(zhí)行單個明確定義的任務(wù)的函數(shù)為目標。復(fù)雜算法應(yīng)盡可能分解成易于理解的更簡單函數(shù)。
在類范圍中定義的函數(shù)稱為成員函數(shù)。在 C++ 中(與其他語言不同),函數(shù)還可以在命名空間范圍中定義(包括隱式全局命名空間)。這類函數(shù)稱為 free 函數(shù)或非成員函數(shù);它們在標準庫中廣泛使用。
函數(shù)聲明的各個部分
最小函數(shù)聲明包含返回類型、函數(shù)名和參數(shù)列表(可能為空),以及向編譯器提供附加說明的可選關(guān)鍵字。函數(shù)定義包含聲明以及函數(shù)體(這是大括號之間的所有代碼)。后接分號的函數(shù)聲明可以出現(xiàn)在程序中的多個位置處。它必須在每個翻譯單元中對該函數(shù)的任何調(diào)用之前出現(xiàn)。根據(jù)單個定義規(guī)則 (ODR),函數(shù)定義必須僅在程序中出現(xiàn)一次。
函數(shù)聲明的必需部分有:
返回類型,指定函數(shù)將返回的值的類型,如果不返回任何值,則為 void。在 C++11 中,auto 是有效返回類型,可指示編譯器從返回語句推斷類型。在 C++14 中,還允許使用 decltype(auto)。有關(guān)詳細信息,請參閱下面的“返回類型中的類型推導(dǎo)”。
函數(shù)名,必須以字母或下劃線開頭,不能包含空格。一般而言,標準庫函數(shù)名中的前導(dǎo)下劃線指示私有成員函數(shù),或不是供你的代碼使用的非成員函數(shù)。
參數(shù)列表(一組用大括號限定、逗號分隔的零個或多個參數(shù)),指定類型以及可以用于在函數(shù)體內(nèi)訪問值的可選局部變量名。
函數(shù)聲明的可選部分有:
constexpr,指示函數(shù)的返回值是常量值,可以在編譯時進行計算。

       constexpr float exp(float x, int n){  return n == 0 ? 1 :    n % 2 == 0 ? exp(x * x, n / 2) :    exp(x * x, (n - 1) / 2) * x;};

其 linkage 規(guī)范(extern 或 static)。

Declare printf with C linkage.extern "C" int printf( const char *fmt, ... );

inline,指示編譯器將對函數(shù)的每個調(diào)用替換為函數(shù)代碼本身。在某個函數(shù)快速執(zhí)行并且在性能關(guān)鍵代碼段中重復(fù)調(diào)用的情況下,內(nèi)聯(lián)可以幫助提高性能。

inline double Account::GetBalance(){  return balance;}

noexcept,指定函數(shù)是否可以引發(fā)異常。在下面的示例中,函數(shù)在 is_pod 表達式計算結(jié)果為 true 時不引發(fā)異常。

#include <type_traits>template <typename T>T copy_object(T& obj) noexcept(std::is_pod<T>) {...}

僅限成員函數(shù))cv 限定符,指定函數(shù)是 const 還是 volatile。
(僅限成員函數(shù))virtual、override 或 final。 virtual 指定可以在派生類中重寫函數(shù)。 override 表示派生類中的函數(shù)在重寫虛函數(shù)。 final 表示函數(shù)不能在任何進一步的派生類中進行重寫。

(僅限成員函數(shù)僅)應(yīng)用于成員函數(shù)的 static 表示函數(shù)不與類的任何對象實例關(guān)聯(lián)。
(僅限非靜態(tài)成員函數(shù))ref 限定符,向編譯器指定隱式對象參數(shù) (*this) 是右值引用與左值引用時要選擇的函數(shù)重載。
下圖顯示了函數(shù)定義的各個部分。灰色區(qū)域是函數(shù)體。

C++中函數(shù)使用的基本知識學習教程

 

函數(shù)定義部分
函數(shù)定義

函數(shù)體內(nèi)聲明的變量稱為局部變量。它們會在函數(shù)退出時超出范圍;因此,函數(shù)應(yīng)永遠不返回對局部變量的引用!
函數(shù)模板
函數(shù)模板類似于類模板;它基于模板參數(shù)生成具體功能。在許多情況下,模板能夠推斷類型參數(shù),因此無需顯式指定它們。

template<typename Lhs, typename Rhs>auto Add2(const Lhs& lhs, const Rhs& rhs){  return lhs + rhs;}auto a = Add2(3.13, 2.895); // a is a doubleauto b = Add2(string{ "Hello" }, string{ " World" }); // b is a std::string有關(guān)詳細信息,請參閱函數(shù)模板

函數(shù)形參和實參
函數(shù)具有零種或多種類型的逗號分隔參數(shù)列表,其中每個參數(shù)都具有可以用于在函數(shù)體內(nèi)訪問它的名稱。函數(shù)模板可以指定其他類型或值參數(shù)。調(diào)用方傳遞實參(其類型與形參列表兼容的具體值)。
默認情況下,參數(shù)通過值傳遞給函數(shù),這意味著函數(shù)會收到所傳遞的對象的副本。對于大型對象,創(chuàng)建副本可能成本高昂,并非始終必要。若要使實參通過引用(特別是左值引用)進行傳遞,請向形參添加引用限定符:

void DoSomething(std::string& input){...}

當函數(shù)修改通過引用傳遞的參數(shù)時,它會修改原始對象,而不是本地副本。若要防止函數(shù)修改這類實參,請將形參限定為

const&:void DoSomething(const std::string& input){...}

C++ 11:若要顯式處理通過右值引用或通過左值引用傳遞的實參,請對形參使用雙與號以指示通用引用:

void DoSomething(const std::string&& input){...}

只要關(guān)鍵字 void 是實參聲明列表中的第一個也是唯一一個成員,那么在形參聲明列表中使用單個關(guān)鍵字 void 聲明的函數(shù)就沒有實參。列表中的其他地方的 void 類型的參數(shù)產(chǎn)生錯誤。例如:

// OK same as GetTickCount()long GetTickCount( void ); 

請注意,盡管指定 void 參數(shù)是非法(此處所述的除外),但派生自類型 void 的類型(如指向 void 的指針和 void 的數(shù)組)可以出現(xiàn)在參數(shù)聲明列表中的任何位置。
默認參數(shù)
函數(shù)簽名中的最后一個或幾個形參可能會分配有默認實參,這意味著調(diào)用方可能會在調(diào)用函數(shù)時省略實參(除非要指定某個其他值)。

int DoSomething(int num,   string str,   Allocator& alloc = defaultAllocator){ ... }// OK both parameters are at endint DoSomethingElse(int num,   string str = string{ "Working" },   Allocator& alloc = defaultAllocator){ ... }// C2548: 'DoMore': missing default parameter for parameter 2int DoMore(int num = 5, // Not a trailing parameter!  string str,  Allocator& = defaultAllocator){...}

函數(shù)返回類型
函數(shù)可能不會返回另一個函數(shù)或內(nèi)置數(shù)組;但是,它可以返回指向這些類型的指針,或生成函數(shù)對象的 lambda。除了這些情況,函數(shù)可以返回處于范圍內(nèi)的任何類型的值,或者它可以返回任何值(在這種情況下返回類型是 void)。
結(jié)尾返回類型
“普通”返回類型位于函數(shù)簽名左側(cè)。結(jié)尾返回類型位于簽名的最右側(cè),前面帶有 -> 運算符。當返回值的類型取決于模板參數(shù)時,結(jié)尾返回類型在函數(shù)模板中尤其有用。

template<typename Lhs, typename Rhs>auto Add(const Lhs& lhs, const Rhs& rhs) -> decltype(lhs + rhs){  return lhs + rhs; }

當 auto 與結(jié)尾返回類型結(jié)合使用時,它對于 decltype 表達式生成的任何內(nèi)容都只用作占位符,本身不執(zhí)行類型推導(dǎo)。
返回類型中的類型推導(dǎo) (C++14)
在 C++14 中,可以使用 auto 指示編譯器從函數(shù)體推斷返回類型,而不必提供結(jié)尾返回類型。請注意,auto 始終推導(dǎo)為按值返回。使用 auto&& 可指示編譯器推導(dǎo)引用。
在此示例中,auto 會推導(dǎo)為 lhs 和 rhs 之和的非常量值副本。

template<typename Lhs, typename Rhs>auto Add2(const Lhs& lhs, const Rhs& rhs){  return lhs + rhs; //returns a non-const object by value}

請注意,auto 不會保留它推導(dǎo)的類型的常量性。對于返回值需要保留其參數(shù)的常量性或引用性的轉(zhuǎn)發(fā)函數(shù),可以使用 decltype(auto) 關(guān)鍵字,該關(guān)鍵字使用 decltype 類型推斷規(guī)則并保留所有類型信息。 decltype(auto) 可以用作左側(cè)的普通返回值,或結(jié)尾返回值。
下面的示例(基于來自 N3493 的代碼)演示的 decltype(auto) 用于采用在模板實例化之前未知的返回類型實現(xiàn)函數(shù)參數(shù)的完美轉(zhuǎn)發(fā)。

template<typename F, typename Tuple = tuple<T...>, int... I>decltype(auto) apply_(F&& f, Tuple&& args, index_sequence<I...>) {  return std::forward<F>(f)(std::get<I>(std::forward<Tuple>(args))...);}template<typename F, typename Tuple = tuple<T...>,  typename Indices = make_index_sequence<tuple_size<Tuple>::value >>  decltype( auto)  apply(F&& f, Tuple&& args)  {  return apply_(std::forward<F>(f), std::forward<Tuple>(args), Indices());}}

函數(shù)局部變量
在函數(shù)主體內(nèi)聲明的變量稱為局部變量。非靜態(tài)局部變量僅在函數(shù)體中可見,如果它們在堆棧上聲明,則會在函數(shù)退出時超出范圍。構(gòu)造局部變量并通過值返回它時,編譯器通??梢詧?zhí)行返回值優(yōu)化以避免不必要的復(fù)制操作。如果通過引用返回局部變量,則編譯器會發(fā)出警告,因為調(diào)用方為使用該引用而進行的任何嘗試會在局部變量已銷毀之后進行。
局部靜態(tài)對象將在 atexit 指定的終止期間銷毀。如果某個靜態(tài)對象由于程序的控制流跳過了其聲明而未構(gòu)造,則不會嘗試銷毀該對象。
靜態(tài)局部變量
在 C++ 中,局部變量可以聲明為靜態(tài)。變量僅在函數(shù)體中可見,但是對于函數(shù)的所有實例,存在變量的單個副本。
函數(shù)指針
C++ 通過與 C 語言相同的方式支持函數(shù)指針。但是更加類型安全的替代方法通常是使用函數(shù)對象。
建議使用 typedef 聲明函數(shù)指針類型的別名(如果聲明返回函數(shù)指針類型的函數(shù))。例如

typedef int (*fp)(int);fp myFunction(char* s); // function returning function pointer

如果不執(zhí)行此操作,則函數(shù)聲明的正確語法可以通過用函數(shù)名稱和參數(shù)列表替換標識符(上例中為 fp)來從函數(shù)指針的聲明符語法推導(dǎo)出,如下所示:

int (*myFunction(char* s))(int);

前面的聲明與使用上面的 typedef 的聲明等效。



發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
久久久久电影| 免费久久久一本精品久久区| 久久久一区二区| 综合天堂久久久久久久| 中文精品一区二区| 国产美女自慰在线观看| 国产va在线播放| 欧美亚洲综合视频| 男人的天堂va在线| 成人动漫在线播放| 国产盗摄一区二区三区在线| 欧美三级电影一区二区三区| 欧美日韩国产大片| 日本伊人精品一区二区三区介绍| 中文字幕你懂的| 久色国产在线| 成人性生交大片免费看中文网站| 日韩欧美精品在线观看| 国产999精品久久| 久久久久久九九| 午夜一级久久| 色婷婷在线播放| 欧美一级免费片| 中文字幕亚洲一区二区三区| 国产成人精品优优av| 亚洲啪啪综合av一区二区三区| 国产成人无码精品久久二区三| 一区二区不卡在线观看| 欧美精品视频www在线观看| 亚洲欧美一区二区三区极速播放| 精品一区2区三区| 欧美一级二级三级九九九| 成人综合婷婷国产精品久久| av在线不卡免费看| 婷婷五月在线视频| 在线视频欧美一区| 亚洲精品一区二区在线播放∴| 色窝窝无码一区二区三区成人网站| 午夜国产欧美理论在线播放| 经典三级一区二区| 亚洲风情第一页| 国产在线精品成人一区二区三区| 最新中文字幕在线观看视频| 色视频www在线播放国产人成| 国产在线视频在线观看| 中文字幕乱码日本亚洲一区二区| 亚洲成人免费视| 粉嫩av免费一区二区三区| 2023国产在线观看| 亚洲国产日韩欧美| 牛牛精品在线| 一区二区国产在线| 亚洲欧美另类国产| 女同性恋一区二区三区| 免费大片在线观看| 黄色录像二级片| 99re6热在线精品视频播放速度| 日本在线播放一区二区| 成人精品天堂一区二区三区| 久久黄色影院| 成年人在线视频免费观看| 国产经典视频一区| 亚洲欧美成人影院| 中文日韩在线视频| 免费观看一区二区三区| 亚洲精品美女久久7777777| 国产精品国产三级国产试看| 91精品国产自产精品男人的天堂| 3d动漫精品啪啪一区二区下载| 国产小视频在线播放| 欧美性猛交xxxx乱大交丰满| 日韩一级免费在线观看| 国产对白在线播放| 欧美特大特白屁股xxxx| 欧美视频综合| 欧美一区二区三区在线观看| 狠狠色噜噜狠狠狠狠黑人| 男女视频在线观看网站| 国产精品国内免费一区二区三区| www.久久爱.com| 成人午夜在线观看| 亚洲日本精品国产第一区| 羞羞网站在线观看入口免费| 激情小说激情视频| 九九热精品视频在线播放| 狠狠色丁香久久婷婷综| 加勒比视频一区| 欧美激情综合网| 国产一区二区精品| 99热这里只有精品免费| 日本性视频网| 四虎4545www精品视频| bdsm精品捆绑chinese女| 成人a免费视频| 欧美日韩国产一区二区三区不卡| 日韩欧美亚洲范冰冰与中字| 国产精品欧美日韩一区| 久久精品国产理论片免费| 国产一区二区在线播放| 亚洲精品视频在线播放| 欧美性巨大欧美| 91久久精品国产91久久| 这里只有精品电影| 国产午夜激情视频| 国产麻豆a毛片| 国产精品久久久久7777| 成人免费看片视频| 精品国产白色丝袜高跟鞋| 欧美第一黄网免费网站| 另类综合日韩欧美亚洲| 免费不卡av| 亚洲美女精品成人在线视频| 欧美三级中文字幕在线观看| 日本视频免费在线| 91色porny在线视频| 日韩av免费在线| 91亚洲国产精品| 2020欧美日韩在线视频| 欧美一区二区三区在线观看| 黄色一级视频网站| 久久精品欧美一区二区| 国产老妇伦国产熟女老妇视频| 高清av中文在线字幕观看1| 国产亚洲成精品久久| 国产一级在线观看| 色琪琪久久se色| 欧美精品一区二区高清在线观看| 五月婷婷激情五月| 91久久国产视频| 伊人天天久久大香线蕉av色| 精品制服美女丁香| 国产色无码精品视频国产| 欧美熟妇一区二区| 欧美激情第10页| 亚洲精品一区久久久久久| 色哟哟国产精品免费观看| 精品污污网站免费看| 天堂在线观看视频观看www| 欧美一区2区三区4区公司二百| 狠狠色狠狠色综合| 精品国产乱码久久久久久牛牛| 亚洲国产综合视频在线观看| 国产98在线| 中文在线免费看视频| 国产视频一区二区视频| 2020中文字幕在线播放| 国产日韩免费视频| 一卡二卡三卡四卡| 日韩在线三区| 免费网站在线高清观看| 欧美极品欧美精品欧美视频| 久久中国妇女中文字幕| 日本一区二区三区在线不卡| 凹凸av导航大全精品| 久久久久久久久久成人| 色综合中文网| 国产精品高潮呻吟视频| 日韩午夜激情视频| 97在线免费视频观看| 亚洲a∨精品一区二区三区导航| 精品国产中文字幕| 亚洲国产综合久久| 成全视频在线播放大地| 欧美另类一区二区三区| 精品国产1区| 欧美一三区三区四区免费在线看| www.8ⅹ8ⅹ羞羞漫画在线看| 国产爆乳无码一区二区麻豆| 91精品国产自产在线| 9久草视频在线视频精品| av中文资源在线资源免费观看| 秋霞无码一区二区| 懂色av蜜臀av粉嫩av分享吧| 97se视频在线观看| 国产精品午夜在线| 日韩av不卡播放| 国产精品久久久久久亚洲av| 黑人巨大精品欧美一区二区免费| 欧美日韩在线视频一区二区| 亚洲一区二区三区四区在线| 一级片久久久久| 欧美精品激情在线观看| 丰满岳乱妇国产精品一区| 日韩中文字幕在线免费观看| 综合色就爱涩涩涩综合婷婷| 亚洲激情在线| 精品美女在线视频| 日韩小视频在线观看专区| 日本高清久久久| 亚洲女人毛片| √天堂8在线网| 国产成人8x视频一区二区| 亚洲第一免费网站| 岛国毛片av在线| 亚洲午夜av久久乱码| 日本美女爱爱视频| 夜夜爽久久精品91| 精品国产区一区二区三区在线观看| 91精品动漫在线观看| 亚洲少妇中出一区| 蜜臀va亚洲va欧美va天堂| 国产伦精品一区二区免费| 91网站在线免费观看| 国产91精品最新在线播放| 成人免费一区二区三区视频| 亚洲图片欧美一区| 国产日产精品一区二区三区| 天堂在线www天堂中文在线| 亚洲影视在线播放| 亚洲黄色一区| jizz一区二区| 九九热最新视频| 欧美精品vⅰdeose4hd| 18成年在线观看| 欧美特黄一级| 精品一区二区三区在线观看l| 国产女片a归国片aa| 教室别恋欧美无删减版| 亚洲一区站长工具| 久久精品99无色码中文字幕| 91日韩精品视频| 欧美在线欧美在线| 欧美欧美欧美欧美| 久久久久亚洲精品| 黄色高清无遮挡| 在线免费观看a级片| 久久久伦理片| 国产黄视频网站| 夜夜爽www精品| 亚洲精品网址在线观看| 亚洲欧洲一区二区三区| 成人免费黄色小视频| 波多野结衣视频网站| 先锋资源一区二区| 精品一区二区三孕妇视频| 日韩av快播网址| 91麻豆精品国产91久久综合| 国产美女明星三级做爰| 久久久久99精品成人片三人毛片| 日韩的一区二区| 亚洲午夜久久久久久久国产| 国产成人精品亚洲男人的天堂| 天天操天天干天天操| 精品亚洲成a人片在线观看| 第四色中文综合网| 国产大片在线观看| 亚洲高潮无码久久| 欧美午夜大胆人体| 欧洲美女7788成人免费视频| 手机在线视频你懂的| 欧美日韩精品综合在线| 国产精品久久久久久久久搜平片| 国产一区欧美日韩| 欧美成人日本| 国产h在线观看| 久久久久麻豆v国产| 久久尤物视频| 不卡一区在线观看| 久久综合中文| 国产精品实拍| 国产私人尤物无码不卡| 日韩视频欧美视频| 国产日产亚洲系列最新| 天天夜碰日日摸日日澡性色av| 欧美色播在线播放| 成人在线播放网站| av在线亚洲一区| 成人性生交大片免费看中文| 欧美巨猛xxxx猛交黑人97人| 成熟了的熟妇毛茸茸| 精品无人乱码一区二区三区| 亚洲在线欧美| 婷婷亚洲五月色综合| 欧美精品成人91久久久久久久| 成人深夜视频在线观看| 国产不卡视频在线| 1区2区3区精品视频| 91蜜桃在线免费视频| 欧美在线免费观看视频| 成人久久18免费网站图片| 国产亚洲精品v| 色播一区二区| 日本精品一区二区| 成人免费观看视频在线观看| 日韩欧美国产1| 曰韩不卡视频| 国产成人精品一区二区色戒| 免费一级网站| 国产精品成人一区二区不卡| 国产美女主播在线播放| 性欧美lx╳lx╳| 国产精品刘玥久久一区| 免费91麻豆精品国产自产在线观看| 极品少妇一区二区| 亚洲男人的天堂网| 欧美白人最猛性xxxxx69交| 二区三区在线观看| 88在线观看91蜜桃国自产| www成人在线| 欧美人成在线| 免费成年人高清视频| 先锋影音久久| 国内综合精品午夜久久资源| 国产一区三区在线播放| 国产精品视频xxxx| 一区二区不卡在线播放| 午夜影院免费观看视频| 日韩欧美一区二区三区| 五月婷六月丁香| 天天干在线视频论坛| 国产原厂视频在线观看| 久久99精品久久久久久久久久| 欧美亚洲一区二区三区四区| 日韩有码欧美| 久久国内精品自在自线400部| 欧美97人人模人人爽人人喊视频| 欧美在线视频一区二区| 国产成人无码一区二区三区在线| a级影片在线观看| 亚洲伦理久久| 亚洲一区二区三区四区五区xx| 精品国产乱码久久久久久蜜柚| 99在线观看视频免费| 欧美大片在线观看一区二区| www.美女亚洲精品| 国产热re99久久6国产精品| 免费播放片a高清在线观看| 三区四区电影在线观看|