一、定義
C++系統中預定義的,在語言或編譯系統的實作中具有特殊含義的單詞。
二、分類
三、部分關鍵字解釋
1、const(常量):const可以用來修飾類中的成員函數以及成員變量以及類的對象
const修飾成員函數:
該函數是隻讀函數,不允許修改任何成員變量,但是可以使用類中的任何成員變量;
不允許修改任何非static的類型的成員變量;
不允許調用其他非const的成員函數;
const修飾成員變量
該成員變量不允許被修改;
該變量隻能在初始化清單中進行指派;
const修飾類的對象
該對象隻能調用const的成員函數,確定const類型的對象永遠不被改變;
使用const修飾的成員變量隻能在初始化清單中進行初始化;使用構造函數初始化清單并沒有效率上的優勢,隻是簡潔明了,且變量初始化的方式與在初始化清單中的順序無關,隻與變量在類中聲明的順序相關;(具體可見https://www.cnblogs.com/lanjianhappy/p/7298427.html)
2、static:用static修飾表示變量或者函數是靜态的,作用域控制在函數内。
共享:對象與對象之間是互相獨立的,想要共享資料,需要使用靜态成員函數以及靜态成員變量;
靜态成員變量是在程式編譯時配置設定空間,在程式結束時釋放空間;
靜态成員變量的初始化需要在類的外面進行,格式:int Mystring::static_A = 10;,不能使用初始化清單對靜态成員變量進行初始化;
既可以通過類名對靜态成員進行使用,也可以通過對象名對靜态成員變量進行使用,既可以同類名來調用靜态成員函數,也可以通過對象名來調用靜态成員函數,但是非靜态成員變量以及成員函數都隻能同類的對象進行調用;
在靜态成員函數中隻可以使用靜态成員變量,非靜态的成員變量以及成員函數由于需要在類的對象執行個體化的時候才會配置設定記憶體,是以在靜态成員函數中是不可以使用非靜态的成員變量以及不能調用非靜态的成員函數的;
const定義的常量在超出其作用域之後其空間會被釋放,而static定義的靜态常量在函數執行後不會釋放其存儲空間。舉個例子:
class A
{
public:
A():m(10)//const成員必須在構造函數的初始化構造清單中初始化
{
q = 40;
}
void fun1()const
{
m++; //錯誤。const成員是常量,不能改變其值。
n++; //正确。static變量n屬于類,但是每個對象的函數都可以通路和改變它
q++; //錯誤。const成員函數不能改變資料成員的值
}
const int m;
static int n;
static const int p;
int q
};
int A::n = 5; //static 成員必須在類外初始化,此時不用加關鍵字static,但是要指定類作用域 A::
const int A::p = 30; //static const 成員跟static成員一樣在類外初始化(而不是在構造函數初始化清單中),記得加上關鍵字const
3、extern:extern可以置于變量或者函數前,以标示變量或者函數的定義在别的檔案中,提示編譯器遇到此變量和函數時在其他子產品中尋找其定義。此外extern也可用來進行連結指定。
extern有兩個作用,第一個,當它與"C"一起連用時,如: extern “C” void fun(int a, int b);則告訴編譯器在編譯fun這個函數名時按着C的規則去翻譯相應的函數名而不是C++的。
第二,當extern不與"C"在一起修飾變量或函數時,如在頭檔案中: extern int g_Int; 它的作用就是聲明函數或全局變量的作用範圍的關鍵字,其聲明的函數和變量可以在本子產品活其他子產品中使用,記住它是一個聲明不是定義!也就是說B子產品(編譯單元)要是引用子產品(編譯單元)A中定義的全局變量或函數時,它隻要包含A子產品的頭檔案即可,在編譯階段,子產品B雖然找不到該函數或變量,但它不會報錯,它會在連接配接時從子產品A生成的目标代碼中找到此函數。
4、operator:(操作符)用于操作符重載。
5、