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 來使用這些 這個庫分為多個不同的模組,這樣就可以根據希望得到的結果來選擇使用的部分。定義了基本的...