C 學習 的用法

2021-09-27 11:26:28 字數 2592 閱讀 1870

例如 二進位制數字 100 & 111 = 100;

eg:

void

main()

引用,顧名思義是某乙個變數或物件的別名,對引用的操作與對其所繫結的變數或物件的操作完全等價

注意:

引用的型別必須和其所繫結的變數的型別相同

# include

using

namespace std;

intmain()

宣告引用的同時必須對其初始化

# include

using namespace std;

intmain()

引用相當於變數或物件的別名,因此不能再將已有的引用名作為其他變數或物件的名字或別名

引用不是定義乙個新的變數或物件,因此記憶體不會為引用開闢新的空間儲存這個引用

引用作為函式的引數

void

swap

(int

&a ,

int&b)

當用引用作為函式的引數時,其效果和用指標作為函式引數的效果相當。當呼叫函式時,函式中的形參就會被當成實參變數或物件的乙個別名來使用,也就是說此時函式中對形參的各種操作實際上是對實參本身進行操作,而非簡單的將實參變數或物件的值拷貝給形參。

通常函式呼叫時,系統採用值傳遞的方式將實參變數的值傳遞給函式的形參變數。此時,系統會在記憶體中開闢空間用來儲存形參變數,並將實參變數的值拷貝給形參變數,也就是說形參變數只是實參變數的副本而已;並且如果函式傳遞的是類的物件,系統還會呼叫類中的拷貝建構函式來構造形參物件。而使用引用作為函式的形參時,由於此時形參只是要傳遞給函式的實參變數或物件的別名而非副本,故系統不會耗費時間來在記憶體中開闢空間來儲存形參。因此如果引數傳遞的資料較大時,建議使用引用作為函式的形參,這樣會提高函式的時間效率,並節省記憶體空間。

使用指標作為函式的形參雖然達到的效果和使用引用一樣,但當呼叫函式時仍需要為形參指標變數在記憶體中分配空間,而引用則不需要這樣,故在c++中推薦使用引用而非指標作為函式的引數

如果在程式設計過程中既希望通過讓引用作為函式的引數來提高函式的程式設計效率,又希望保護傳遞的引數使其在函式中不被改變,則此時應當使用對常量的引用作為函式的引數。

陣列的引用作為函式的引數:c++的陣列型別是帶有長度資訊的,引用傳遞時如果指明的是陣列則必須指定陣列的長度

void

func

(int

(&a)[5

])

常引用語法:const 型別 &引用名=目標變數名;

常引用不允許通過該引用對其所繫結的變數或物件進行修改

const

int&new_a=a;

new_a=11;

//錯誤,不允許通過常引用對其所繫結的變數或物件進行修改

引用作為函式的返回值語法:型別 &函式名(形參列表)

注意:引用作為函式的返回值時,必須在定義函式時在函式名前將&

用引用作函式的返回值的最大的好處是在記憶體中不產生返回值的副本

#include

using

namespace std;

float temp;

float

fn1(

float r)

float

&fn2

(float r)

intmain()

用引用實現多型在c++中,引用是除了指標外另乙個可以產生多型效果的手段。也就是說乙個基類的引用可以用來繫結其派生類的例項

class

father

;//基類(父類)

class

son:public father

//son是father的派生類

son son;

//son是類son的乙個例項

father &ptr=son;

//用派生類的物件初始化基類物件的使用

ptr只能用來訪問派生類物件中從基類繼承下來的成員。如果基類(類father)中定義的有虛函式,那麼就可以通過在派生類(類son)中重寫這個虛函式來實現類的多型。

在引用的使用中,單純給某個變數去別名是毫無意義的,引用的目的主要用於在函式引數的傳遞中,解決大塊資料或物件的傳遞效率和空間不如意的問題

用引用傳遞函式的引數,能保證引數在傳遞的過程中不產生副本,從而提高傳遞效率,同時通過const的使用,還可以保證引數在傳遞過程中的安全性

引用本身是目標變數或物件的別名,對引用的操作本質上就是對目標變數或物件的操作。因此能使用引用時盡量使用引用而非指標

C學習 volatile的用法

volatile 影響編譯器編譯的結果 指出,volatile 變數是隨時可能發生變化的,與 volatile 變數有關的運算,不要進行編譯優化,以免出錯,vc 在產生release 版可執行碼時會進行編譯優化,加 volatile 關鍵字的變數有關的運算,將不進行編譯優化。例如 volatile ...

C 學習之namespace的用法

fish.h ifndef test header fish define test header fish include namespace ns fish endif defined test header fish fish.cpp include include fish.h using ...

C 學習(一) auto的用法

在c 11標準之前,auto是乙個說明符,表示變數為自動變數,但是在c 中,一般把變數預設為自動儲存,所以關鍵字auto很少用到。在c 11標準實行後,auto不再是說明符,它被重新定義,用於自動型別推斷,比如 auto n 100 n is int auto x 1.5 x is double a...