真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++中的函數(shù)及參數(shù)介紹-創(chuàng)新互聯(lián)

函數(shù)的概念

函數(shù)是一組一起執(zhí)行一個(gè)任務(wù)的語句。每個(gè) C++ 程序都至少有一個(gè)函數(shù),即主函數(shù) main() ,所有簡單的程序都可以定義其他額外的函數(shù)。

創(chuàng)新互聯(lián)于2013年開始,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目做網(wǎng)站、成都網(wǎng)站制作網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢想脫穎而出為使命,1280元從江做網(wǎng)站,已為上家服務(wù),為從江各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792

你可以把代碼劃分到不同的函數(shù)中。如何劃分代碼到不同的函數(shù)中是由你來決定的,但在邏輯上,劃分通常是根據(jù)每個(gè)函數(shù)執(zhí)行一個(gè)特定的任務(wù)來進(jìn)行的。

函數(shù)聲明告訴編譯器函數(shù)的名稱、返回類型和參數(shù)。函數(shù)定義提供了函數(shù)的實(shí)際主體。

C++ 標(biāo)準(zhǔn)庫提供了大量的程序可以調(diào)用的內(nèi)置函數(shù)。例如,函數(shù) strcat() 用來連接兩個(gè)字符串,函數(shù) memcpy() 用來復(fù)制內(nèi)存到另一個(gè)位置。

函數(shù)還有很多叫法,比如方法、子例程或程序,等等。

函數(shù)重載

簡單介紹

在相同的作用域,可以定義同名的函數(shù),但是它們的參數(shù)要有所區(qū)分,這樣的函數(shù)構(gòu)成重載關(guān)系,此外函數(shù)之間能否構(gòu)成重載和返回值無關(guān)。

小例子:

#include 
using namespace std;

void foo(int a) {
    cout << "foo(int)" << endl;
}

void foo(int a, int b) {
    cout << "foo(int, int)" << endl;
}

int main() {
    foo(1);
    foo(2, 3);
    return 0;
}

返回結(jié)果:
foo(int)
foo(int, int)
函數(shù)重載的原理

C++編譯是通過對函數(shù)進(jìn)行換名,將參數(shù)表的信息整合到新的函數(shù)名中,解決函數(shù)重載與名字沖突的矛盾。

通過nm查看目標(biāo)文件中函數(shù)換名后的名字:

源文件的內(nèi)容:
void func(int a, int b) {}
void func(int a, int b, int c) {}

生成目標(biāo)文件:
F:\c_projects\20181011_01>g++ -c demo3.cpp

查看目標(biāo)文件信息:
F:\c_projects\20181011_01>nm demo3.o
00000000 b .bss
00000000 d .data
00000000 r .eh_frame
00000000 r .rdata$zzz
00000000 t .text
00000000 T __Z4funcii   // 修改后的第一個(gè)函數(shù)
00000006 T __Z4funciii   // 修改后的第二個(gè)函數(shù)

當(dāng)你打算讓你的C程序去調(diào)用C++的程序的時(shí)候,是無法直接去函數(shù)的,因?yàn)镃++的編譯器會將函數(shù)修改名字,當(dāng)然若是直接調(diào)用C++編譯器修改后的名字也是可以的。

也可以在函數(shù)聲明的時(shí)候加入extern "C",這樣是要求C++編譯器不對函數(shù)做換名,便于C程序去調(diào)用,但是這樣的函數(shù)無法實(shí)現(xiàn)重載。

實(shí)例:

extern "C" void func(..){..}
extern "C" {
    void func1(..){..}
    void func2(..){..}
    ...
}

函數(shù)的參數(shù)

缺省參數(shù)

可以為函數(shù)的部分或全部形參指定缺省值,調(diào)用該函數(shù)時(shí),如果不給實(shí)參,就取缺省值作為相應(yīng)形參的值。

例如:

#include 
using namespace std;

void func(int a = 1, int b = 2, int c = 3) {
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "c = " << c << endl;
}

int main() {
    func();   // 當(dāng)沒有給函數(shù)傳遞參數(shù)的時(shí)候,函數(shù)的參數(shù)取的是默認(rèn)給的值
    return 0;
}

結(jié)果是:
a = 1
b = 2
c = 3

缺省參數(shù)必須靠右,如果一個(gè)參數(shù)帶有缺省值,那么右側(cè)的所有參數(shù)都必須帶有缺省值。

void func(int a = 10, int b = 20);//ok
void func(int a, int b = 20);//ok
void func(int a = 10, int b);//error

如果函數(shù)的定義和聲明分開,缺省參數(shù)應(yīng)該寫在函數(shù)的聲明部分,而定義部分不寫。

聲明:
void func(int a, int b = 100, int c = 200);

定義:
void func(int a, int b, int c) {};

void func(){函數(shù)體}//函數(shù)定義
void func();//函數(shù)聲明

啞元參數(shù)

只有類型沒有變量名的形參稱為啞元參數(shù)。

例如:

void func(int){};

啞元參數(shù)因?yàn)闆]有變量名因此是不需要也不能被調(diào)用的。

一般在兼容舊代碼的時(shí)候會用到。

實(shí)例:

#include 
using namespace std;

void func(int a, int) {
    cout << "啞元參數(shù)" << endl;
}

int main() {
    func(10, 20);
    return 0;
}

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

使用inline關(guān)鍵字修飾的函數(shù),表示這個(gè)函數(shù)是內(nèi)聯(lián)函數(shù),編譯器將會嘗試做內(nèi)聯(lián)優(yōu)化,避免函數(shù)調(diào)用的開銷。

實(shí)例:

inline void func(...) {};

內(nèi)聯(lián)函數(shù)僅適用于小而簡單的函數(shù),調(diào)用次數(shù)很少或者大而復(fù)雜的函數(shù),不適合做內(nèi)聯(lián),例如遞歸函數(shù)。

此外內(nèi)聯(lián)優(yōu)化知識一種建議而不是要求,能否內(nèi)聯(lián)主要取決于編譯器,有些函數(shù)不加inline關(guān)鍵字也會進(jìn)行內(nèi)聯(lián)優(yōu)化,而有些函數(shù)即便加了inline關(guān)鍵字也會被編譯器忽略。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


網(wǎng)站標(biāo)題:C++中的函數(shù)及參數(shù)介紹-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://weahome.cn/article/cdcdci.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部