欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)邀請碼778899分享:C++基礎(chǔ)

柚子快報(bào)邀請碼778899分享:C++基礎(chǔ)

http://yzkb.51969.com/

命名空間

在C/C++中,變量、函數(shù)和后面要學(xué)到的類都是大量存在的,這些變量、函數(shù)和類的名稱將都存在于全局作用域中,可能會導(dǎo)致很多沖突。使用命名空間的目的是對標(biāo)識符的名稱進(jìn)行本地化,以避免命名沖突或名字污染,namespace關(guān)鍵字的出現(xiàn)就是針對這種問題的。

命名空間的概念

命名空間是一個聲明區(qū)域,它可以將變量、函數(shù)、類等標(biāo)識符組織在一起,形成一個獨(dú)立的作用域。這意味著,在同一個程序中,不同命名空間內(nèi)的標(biāo)識符可以同名而不會產(chǎn)生沖突。

命名空間的作用

避免命名沖突:在一個大型的項(xiàng)目中,不同的模塊或庫可能會使用相同的函數(shù)名或變量名,命名空間能夠有效地避免這種沖突。提高代碼的可讀性和可維護(hù)性:通過將相關(guān)的標(biāo)識符組織在同一個命名空間中,代碼的結(jié)構(gòu)更清晰,便于管理和維護(hù)。

命名空間的使用

定義命名空間

在C++中,使用namespace關(guān)鍵字來定義一個命名空間:

namespace 名稱 {

// 聲明或定義變量、函數(shù)、類等

}

例如:

namespace MyNamespace {

int add(int a, int b) {

return a + b;

}

}

訪問命名空間中的成員

要訪問命名空間中的成員,可以使用作用域解析操作符::

MyNamespace::add(5, 10);

使用using聲明

可以使用using關(guān)鍵字簡化對命名空間成員的訪問:

using namespace MyNamespace;

add(5, 10); // 直接使用函數(shù)名,無需加命名空間前綴

使用匿名命名空間

匿名命名空間是一種特殊的命名空間,它沒有名字,通常用于隱藏只在當(dāng)前源文件中使用的函數(shù)、變量和類型。在匿名命名空間中聲明的所有元素都自動成為該源文件的局部命名空間的一部分:

namespace {

int hiddenVariable = 42;

void hiddenFunction() {

// 函數(shù)體

}

}

在這個例子中,hiddenVariable和hiddenFunction只能在當(dāng)前源文件內(nèi)部訪問。

C++的輸入和輸出

C++標(biāo)準(zhǔn)庫中的所有標(biāo)準(zhǔn)函數(shù)和對象都放在名為std的命名空間中,這是為了防止它們與程序中定義的標(biāo)識符產(chǎn)生沖突。例如,使用std::cout和std::endl來輸出到控制臺。

c++的Hello world

#include

// std是C++標(biāo)準(zhǔn)庫的命名空間名,C++將標(biāo)準(zhǔn)庫的定義實(shí)現(xiàn)都放到這個命名空間中

using namespace std;

int main()

{

cout<<"Hello world!!!"<

return 0;

}

說明:

使用cout標(biāo)準(zhǔn)輸出對象(控制臺)和cin標(biāo)準(zhǔn)輸入對象(鍵盤)時(shí),必須包含< iostream >頭文件 以及按命名空間使用方法使用std。

cout和cin是全局的流對象,endl是特殊的C++符號,表示換行輸出,他們都包含在包含< iostream >頭文件中。

<<是流插入運(yùn)算符,>>是流提取運(yùn)算符。

使用C++輸入輸出更方便,不需要像printf/scanf輸入輸出時(shí)那樣,需要手動控制格式。 C++的輸入輸出可以自動識別變量類型。

#include

using namespace std;

int main()

{

int a;

double b;

char c;

// 可以自動識別變量的類型

cin>>a;

cin>>b>>c;

cout<

cout<

return 0;

}

std命名空間的使用慣例

std是C++標(biāo)準(zhǔn)庫的命名空間,如何展開std使用更合理呢?

在日常練習(xí)中,建議直接using namespace std即可,這樣就很方便。using namespace std展開,標(biāo)準(zhǔn)庫就全部暴露出來了,如果我們定義跟庫重名的類型/對象/函數(shù),就存在沖突問題。該問題在日常練習(xí)中很少出現(xiàn),但是項(xiàng)目開發(fā)中代碼較多、規(guī)模大,就很容易出現(xiàn)。所以建議在項(xiàng)目開發(fā)中使用,像std::cout這樣使用時(shí)指定命名空間 + using std::cout展開常用的庫對象/類型等方式。

缺省參數(shù)

缺省參數(shù)是函數(shù)定義時(shí)的一個特性,它允許在函數(shù)的聲明或定義中為某些參數(shù)指定默認(rèn)值。如果沒有為這些參數(shù)傳遞實(shí)參,函數(shù)就會使用這些默認(rèn)值;如果傳遞了實(shí)參,則使用傳遞的值。

缺省參數(shù)的定義

當(dāng)你定義或聲明一個函數(shù)時(shí),你可以為參數(shù)指定一個默認(rèn)值,如下所示:

void Print(int number = 0) {

cout << number;

}

在這個例子中,函數(shù)Print有一個參數(shù)number,它的默認(rèn)值是0。這意味著如果你調(diào)用Print()而沒有任何實(shí)參,函數(shù)將使用默認(rèn)值0。

缺省參數(shù)的使用

調(diào)用函數(shù)時(shí)不傳遞參數(shù)

如果你在調(diào)用Print函數(shù)時(shí)不提供任何參數(shù),它將使用參數(shù)的默認(rèn)值:

Print(); // 輸出: 0

調(diào)用函數(shù)時(shí)傳遞參數(shù)

如果你提供了參數(shù),函數(shù)將使用你傳遞的值而不是默認(rèn)值:

Print(5); // 輸出: 5

缺省參數(shù)的規(guī)則

默認(rèn)值的位置:在函數(shù)原型或定義中,默認(rèn)值必須位于參數(shù)列表的末尾。也就是說,你必須從右向左指定參數(shù)的默認(rèn)值。 全缺省參數(shù):所有參數(shù)都可以有默認(rèn)值,這種函數(shù)調(diào)用時(shí)可以不提供任何實(shí)參。 半缺省參數(shù):只有部分參數(shù)有默認(rèn)值。當(dāng)你指定了某個參數(shù)的默認(rèn)值時(shí),所有位于其右側(cè)的參數(shù)也必須有默認(rèn)值。 默認(rèn)參數(shù)的順序:你不能為一個參數(shù)指定默認(rèn)值,然后跳過前面的參數(shù)為后面的參數(shù)指定默認(rèn)值。必須從右至左連續(xù)指定。

示例

下面是一個包含半缺省參數(shù)的函數(shù)示例:

void Print(int number, int count = 1) {

for (int i = 0; i < count; i++) {

cout << number << " ";

}

cout << endl;

}

Print(5); // 輸出: 5 (使用了number的默認(rèn)值,count的默認(rèn)值)

Print(5, 3); // 輸出: 5 5 5 (使用了傳遞的number值和count值)

在這個例子中,Print函數(shù)的第一個參數(shù)number沒有默認(rèn)值,第二個參數(shù)count有默認(rèn)值1。所以,如果你只提供一個參數(shù),那么第二個參數(shù)將使用默認(rèn)值1。

函數(shù)重載

函數(shù)重載是一種允許多個同名函數(shù)在相同的作用域中存在,只要它們的參數(shù)列表不同(即參數(shù)的個數(shù)、類型或順序不同)的特性。函數(shù)重載使得程序設(shè)計(jì)更加靈活,能夠根據(jù)不同的參數(shù)執(zhí)行相似或相關(guān)的任務(wù)。

函數(shù)重載的概念

當(dāng)你在同一作用域內(nèi)定義多個同名函數(shù)時(shí),這些函數(shù)如果參數(shù)列表不同,它們就是重載的。重載的函數(shù)可以具有不同的參數(shù)數(shù)量、不同的參數(shù)類型,或者參數(shù)類型順序不同。然而,函數(shù)重載與函數(shù)返回類型無關(guān),即不能僅通過返回類型來重載函數(shù)。

函數(shù)重載的規(guī)則

參數(shù)列表必須不同:重載的函數(shù)必須有區(qū)別于其他同名函數(shù)的參數(shù)列表。 返回類型不影響重載:即使函數(shù)的返回類型不同,也不構(gòu)成有效的重載。 作用域的限制:函數(shù)重載只限于同一作用域內(nèi)。在不同的作用域(如不同的命名空間或類中),即使是完全相同的函數(shù)名和參數(shù)列表,也被視為不同的函數(shù)。

函數(shù)重載的示例

以下是一個展示函數(shù)重載的簡單示例:

#include

using namespace std;

// 重載函數(shù):接受一個整數(shù)參數(shù)

void display(int number) {

cout << "Displaying int: " << number << endl;

}

// 重載函數(shù):接受浮點(diǎn)參數(shù)

void display(float number) {

cout << "Displaying float: " << number << endl;

}

// 重載函數(shù):接受兩個整數(shù)參數(shù)

void display(int number1, int number2) {

cout << "Displaying two int: " << number1 << " and " << number2 << endl;

}

int main() {

display(12); // 調(diào)用第一個重載版本的display函數(shù)

display(12.3f); // 調(diào)用第二個重載版本的display函數(shù)

display(12, 24); // 調(diào)用第三個重載版本的display函數(shù)

return 0;

}

在這個例子中,我們定義了三個display函數(shù)。第一個接受一個整數(shù)參數(shù),第二個接受一個浮點(diǎn)參數(shù),第三個接受兩個整數(shù)參數(shù)。由于它們的參數(shù)列表不同,這三個函數(shù)是重載的。

函數(shù)重載的工作原理

編譯器通過函數(shù)的名稱修飾(name mangling)來區(qū)分不同的載函數(shù)。它修改函數(shù)的名稱,通常添加額外的信息以反映參數(shù)類型和參數(shù)數(shù)量,從而生成不同的函數(shù)名稱以供鏈接器使用。

函數(shù)重載的注意點(diǎn)

不能通過返回類型來區(qū)分重載函數(shù)。如果新的重載函數(shù)參數(shù)列表是現(xiàn)有函數(shù)參數(shù)列表的超集,這可能導(dǎo)致函數(shù)名稱修飾出現(xiàn)問題,并可能引起函數(shù)調(diào)用的歧義。 -重載函數(shù)時(shí),要注意不要造成函數(shù)名稱的混淆,否則編譯器可能無法正確地選擇調(diào)用哪一個函數(shù)。

引用

當(dāng)然可以。在C++中,引用(reference)是一個非常便利的特性,它允許程序員為變量的別名。通過使用引用,我們可以通過這個別名來直接訪問或修改變量的值。引用在很多情況下可以用來代替指針,因?yàn)樗鼈兲峁┝艘环N更安全和更易于理解的語法。

引用的定義和聲明

引用的聲明與指針類似,但它不需要使用星號*。引用在聲明時(shí)必須被初始化,一旦初始化之后,它就不能再綁定到另一個變量上。

類型 &引用名 = 變量名;

例如:

int a = 10;

int &ref = a; // 聲明引用ref,并將其初始化為變量a的引用

在這個例子中,ref是a的引用,它們代表同一個存儲位置。

引用的特性

引用是別名:引用實(shí)際上是原變量的別名,任何對引用的操作都直接反映在原變量上。 初始化時(shí)綁定:引用必須在聲明時(shí)綁定到具體的變量,且一旦綁定就不能再改變引用所指向的變量。 沒有獨(dú)立的內(nèi)存地址:引用沒有自己的內(nèi)存地址,它共享原變量的內(nèi)存地址。 無需解引用:使用引用時(shí)不需要像指針那樣進(jìn)行解引用操作,直接使用引用名即可。

引用的使用

傳遞引用到函數(shù)

引用經(jīng)常用于函數(shù)參數(shù),允許函數(shù)直接修改傳入的參數(shù)值,而不是參數(shù)的副本:

void addOne(int &num) {

num = num + 1; // 直接修改傳入的參數(shù)

}

int main() {

int x = 5;

addOne(x); // x的值將變?yōu)?

return 0;

}

在這個例子中,addOne函數(shù)接受一個整數(shù)的引用作為參數(shù),所以它可以直接修改x的值。

返回引用

函數(shù)也可以返回引用,這樣返回的是變量的引用而不是副本:

int &getFirstElement(int arr[]) {

return arr[0]; // 返回第一個元素的引用

}

int main() {

int myArray[] = {10, 20, 30};

int &first = getFirstElement(myArray); // first是myArray[0]的引用

first = 100; // 直接修改myArray[0]的值

return 0;

}

在這個例子中,getFirstElement函數(shù)返回?cái)?shù)組第一個元素的引用,因此通過first可以直接修改myArray[0]的值。

引用的注意事項(xiàng)

不能有null引用:指針可以被賦予nullptr,但引用必須指向一個有效的變量。不能重新綁定:一旦引用被初始化為一個變量,它就不能再指向另一個變量。引用不能指向數(shù)組:你不能創(chuàng)建一個數(shù)組的引用,但可以創(chuàng)建指向數(shù)組元素的引用。

引用和指針的不同點(diǎn):

引用概念上定義一個變量的別名,指針存儲一個變量地址。引用在定義時(shí)必須初始化,指針沒有要求引用在初始化時(shí)引用一個實(shí)體后,就不能再引用其他實(shí)體,而指針可以在任何時(shí)候指向任何 一個同類型實(shí)體沒有NULL引用,但有NULL指針在sizeof中含義不同:引用結(jié)果為引用類型的大小,但指針始終是地址空間所占字節(jié)個數(shù)(32 位平臺下占4個字節(jié))引用自加即引用的實(shí)體增加1,指針自加即指針向后偏移一個類型的大小有多級指針,但是沒有多級引用訪問實(shí)體方式不同,指針需要顯式解引用,引用編譯器自己處理引用比指針使用起來相對更安全

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

內(nèi)聯(lián)函數(shù)是一種優(yōu)化手段,其目的是減少函數(shù)調(diào)用的開銷。當(dāng)函數(shù)體較小且被頻繁調(diào)用時(shí),函數(shù)調(diào)用的成本可能會對性能產(chǎn)生負(fù)面影響。為了減少這種開銷,可以將函數(shù)聲明為內(nèi)聯(lián)函數(shù),使得每次函數(shù)調(diào)用時(shí),編譯器將函數(shù)的代碼直接插入到調(diào)用點(diǎn),而不是通過跳轉(zhuǎn)到函數(shù)代碼的地址去執(zhí)行。

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

內(nèi)聯(lián)函數(shù)通過在函數(shù)聲明或定義之前添加inline關(guān)鍵字來指定。例如:

inline int add(int a, int b) {

return a + b;

}

內(nèi)聯(lián)函數(shù)的特點(diǎn)

減少調(diào)用開銷:由于函數(shù)體直接插入到調(diào)用點(diǎn),省去了函數(shù)調(diào)用的參數(shù)傳遞、返回值處理以及堆棧操作等開銷。 無額外內(nèi)存分配:內(nèi)聯(lián)函數(shù)不會像普通函數(shù)那樣在棧上為局部變量分配內(nèi)存。 編譯器優(yōu)化:編譯器可能會對內(nèi)聯(lián)函數(shù)的代碼進(jìn)行額外的優(yōu)化。

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

內(nèi)聯(lián)函數(shù)通常用于以下場景:

小型函數(shù):函數(shù)體非常短小,例如簡單的算術(shù)運(yùn)算或訪問器函數(shù)。 頻繁調(diào)用的函數(shù):如果一個函數(shù)在程序中頻繁調(diào)用,那么將其聲明為內(nèi)聯(lián)可能會提升性能。 性能關(guān)鍵代碼:在性能敏感的代碼路徑中,使用內(nèi)聯(lián)函數(shù)可以減少函數(shù)調(diào)用開銷。

內(nèi)聯(lián)函數(shù)的注意事項(xiàng)

編譯器選擇:即使函數(shù)被聲明為內(nèi)聯(lián),編譯器也有權(quán)決定是否真正內(nèi)聯(lián)該函數(shù)。這取決于編譯器的優(yōu)化策略和函數(shù)的復(fù)雜性。 過度內(nèi)聯(lián):如果過度使用內(nèi)聯(lián)函數(shù),可能會導(dǎo)致代碼膨脹,增加程序的內(nèi)存占用,并且可能影響緩存效率。 遞歸函數(shù):內(nèi)聯(lián)遞歸函數(shù)可能會導(dǎo)致代碼無限增長,因此通常不推薦對遞歸函數(shù)使用內(nèi)聯(lián)。 調(diào)試?yán)щy:內(nèi)聯(lián)函數(shù)可能會使得調(diào)試變得復(fù)雜,因?yàn)楹瘮?shù)調(diào)用點(diǎn)沒有明顯的調(diào)用棧幀。

內(nèi)聯(lián)函數(shù)與宏的區(qū)別

雖然內(nèi)聯(lián)函數(shù)和宏都可以在編譯時(shí)插入代碼,但它們有一些重要區(qū)別:

類型安全:內(nèi)聯(lián)函數(shù)是類型安全的,而宏不是。宏只是簡單的文本替換,可能會導(dǎo)致類型安全問題。 作用域:內(nèi)聯(lián)函數(shù)可以訪問局部變量和全局變量,而宏則不能。 調(diào)試:內(nèi)聯(lián)函數(shù)可以像普通函數(shù)一樣調(diào)試,宏則不能。 參數(shù)的副作用:宏在展開時(shí)可能會對參數(shù)產(chǎn)生副作用,而內(nèi)聯(lián)函數(shù)則不會。

柚子快報(bào)邀請碼778899分享:C++基礎(chǔ)

http://yzkb.51969.com/

精彩內(nèi)容

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19504605.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄