C++對C的加強
1.命名空間
爲了解決合作開發時的命名衝突問題,C++ 引入了命名空間(Namespace)的概念。
命名空間將全局作用域分成不同的部分
不同命名空間中的標識符可以同名而不會發生衝突
命名空間可以相互嵌套
全局作用域也叫默認命名空間
1)定義:
namespace 是C++中的關鍵字,用來定義一個命名空間,語法格式爲:
namespace name
{
變量
函數
類
}
name是命名空間的名字,它裏面可以包含變量、函數、類、typedef、#define 等,最後由{ }包圍。
2)使用方法:
1.使用域解析符::
2.使用using聲明
2.register關鍵字的改變
1、C++編譯器有自己的優化方式,不使用register也可能做優化
2、C++中可以取得register變量的地址
3.struct類型加強
C語言的struct定義了一組變量的集合,C編譯器並不認爲這是一種新的類型
C++中的struct是一個新類型的定義聲明
4.C++中所有變量和函數都必須要有類型
5.bool類型關鍵字
true代表真值,編譯器內部用1來表示
false代表非真值,編譯器內部用0來表示
bool類型只有true(非0)和false(0)兩個值
C++編譯器會在賦值時將非0值轉換爲true,0值轉換爲false
6.三目運算符的增強
在C++中,表達式返回的是變量本身
C++中三目運算符返回的是變量本身,所以可以作爲左值使用
const關鍵字的改變
C語言中 const修飾的變量是一個 常變量,本質還是變量,有自己的地址空間
C++中 const 變量聲明的是一個真正的常量,不是變量,所以編譯器不會爲該常量分配空間
const 修飾的常量會被放到 符號表 中
C++的引用
概念:
1)引用作爲其它變量的別名而存在,因此在一些場合可以代替指針
2)引用相對於指針來說具有更好的可讀性和實用性
引用的本質:
引用在C++中的內部實現是一個常指針
Type& name ===> Type* const name
C++編譯器在編譯過程中使用常指針作爲引用的內部實現,因此引用所佔用的空間大小與指針相同。
從使用的角度,引用會讓人誤會其只是一個別名,沒有自己的存儲空間。這是C++爲了實用性而做出的細節隱藏
常引用:
const & int e 相當於 const int * const e
普通引用 相當於 int *const e1
當使用常量(字面量)對const引用進行初始化時,C++編譯器會爲常量值分配空間,並將引用名作爲這段空間的別名
使用字面量對const引用初始化後,將生成一個只讀變量
1.內聯函數
C++中推薦使用內聯函數替代宏代碼片段
C++中使用inline關鍵字聲明內聯函數
內聯函數聲明時inline關鍵字必須和函數定義結合在一起,否則編譯器會直接忽略內聯請求。
tip:C++編譯器不一定準許函數的內聯請求
2.默認參數
C++中可以在函數聲明時爲參數提供一個默認值,
當函數調用時沒有指定這個參數的值,編譯器會自動用默認值代替
3.佔位參數
佔位參數只有參數類型聲明,而沒有參數名聲明
一般情況下,在函數體內部無法使用佔位參數
4.函數重載
概念:
用同一個函數名定義不同的函數
當函數名和不同的參數搭配時函數的含義不同
判斷標準:
函數重載至少滿足下面的一個條件:
參數個數不同
參數類型不同
參數順序不同