C 11基礎語法知識總結 一

2021-10-01 15:41:43 字數 3223 閱讀 1810

string類

1、issize()

;decltype

(line.

size()

) m=line.

size()

;vector類

1、早期的vector的元素還是vector,則需要在外層vector的右尖括號和其元素型別之間加乙個空格:

vectorint>

>

而新標準中可以直接採用:

vectorint>>
2、最好在開始時建立空的vector物件,在執行時再動態新增元素,這樣效能可能會更好。

左值和右值

當乙個物件被用作為右值,用的是物件的值(內容),當物件被用作是左值時,用的是物件的身份(在記憶體中的為止)

使用左值的運算子:

賦值運算子、取位址符、內建解引用運算子、下標運算子、迭代器解引用運算子、vector的下標運算子、內建型別和迭代器的遞增遞減運算子

在使用decltype時,如果表示式的求值結果是乙個左值,則decltype作用於該表示式得到乙個引用型別

int* p;

decltype(*p)的結果是int&

decltype(&p)的結果是int

const的層次

頂層const:可以表示任意的物件是常量,比如表示指標本身是乙個常量

底層const:與指標和引用等復合型別的基本型別部分有關,比如表示指標所指的物件是乙個常量

顯式強制型別轉換

1、static_cast

任何具有明確定義的型別轉換,只要不包含底層const,都可以使用static_cast

2、const_cast

const_cast只能改變運算物件的底層const

3、reinterpret_cast

通常為運算物件的位模式提供較低層次上的重新解釋。

函式過載

1、定義:函式名相同,但函式形參型別或形參個數不同。

但是乙個擁有頂層const的形參無法和另乙個沒有頂層const的形參區分開來:

record lookup

(phone)

;record lookup

(const phone)

;//頂層const,不是過載

record lookup

(phone*);

record lookup

(phone*

const);

//頂層const,不是過載

record lookup

(phone&);

record lookup

(const phone&);

//底層const,是過載

record lookup

(phone*);

record lookup

(const phone*);

//底層const,是過載

過載不會改變作用域的一般性質:如果在內層作用域中宣告名字,它將隱藏外層作用域中宣告的同名實體。

在c++中,名字查詢發生在型別查詢之前

基於const的過載:

a、函式形參個數、型別相同,但乙個是非常量版本,乙個是底層const,會觸發過載。

b、類的成員函式是否是const的,也會觸發過載。這種過載是因為const成員函式會將this指標變成指向常量的常量指標,當定義乙個非常量物件時,它優先呼叫非常量版本的成員函式,而常量物件則會只呼叫const成員函式。因為const成員函式將this指標所指物件變成了const物件,所以它對於this指標而言是乙個底層const,從而觸發過載。

void

display

(ostream &os)

void

display

(ostream &os)

const

screen myscreen;

const screen blank;

myscreen.

display

(cout)

;//==呼叫非const版本==

blank.

display

(cout)

;//==呼叫const版本==

這是因為類的物件呼叫成員函式時,隱式地會傳入乙個this指標,所以兩個display()函式可看成如下形式:

display

(ostream &os, screen*

const

this

)display

(ostream &os,

const screen *

const

this

)

對於myscreen來說,它的this指標是非const的,雖然它的this指標可以被隱式轉換為const的,但當display函式存在非const版本,則非const的display更加匹配。而blank的this指標所指物件是const的,它和const版display更加匹配。

過載函式匹配原則

a、根據形參個數和形參型別確定候選函式

b、如果有多個函式匹配,選擇最佳匹配,原則是:實參型別和形參型別越接近,匹配越好。

函式指標

函式指標指向某種特定型別,函式的型別由他的返回值型別和形參型別決定

當函式指標作為形參時,

*

*//func 和 func2都是函式型別**

typedef

bool

func

(const string&

,const string&);

typedef

decltype

(lengthcompare) func2;**

//funcp和func2p都是指標型別**

typedef

bool

(*funcp)

(const string&

,const string&);

typedef

decltype

(lengthcompare)

*func2p;

decltype作用於函式時,只會返回函式型別而非指標型別

C 11基礎語法知識總結(五)

當過載的運算子為成員函式時,this指標繫結到左側運算物件上。成員運算子函式的顯式引數數量比運算物件少乙個。對於乙個過載的二元運算子來說,左側運算物件傳入第乙個引數,右側運算物件傳入第二個引數。如果作為成員運算子,則this指標所指內容預設作為左側運算子物件,函式只需傳入乙個引數,作為右側運算物件。...

C 11語法甜點

c 11中引入了許多簡化程式設計工作的語法上的新特性,我們暫且美其名曰 語法甜點 下面一一進行介紹。語法甜點1 序列for迴圈 序列for迴圈是一種簡化的for迴圈,可用於遍歷一組序列,包括各種容器 string 陣列 初始化列表以及由begin和end函式定義的序列。示例 如下 1 vectorv...

C 1 1知識準備

net的含義 一般指.net framework框架,是microsoft為開發應用程式而建立的乙個平台。net 的內容 主要包含乙個龐大的 庫。可以在客戶語言 如c 中通過物件導向程式設計技術 opp 來使用這些 這個庫分為多個不同的模組,這樣就可以根據希望得到的結果來選擇使用的部分。定義了基本的...