extern int j; //聲明 j(未定義)
int j; //聲明並定義
不能在函數體內部初始化一個extern標記的變量
多文件使用同一變量應在一個文件中定義多個文件中聲明
引用不是變量所以不存在引用的引用
void 型的指針多是用於承載,而不是用於操作,因爲我們不清楚他的類型就無法確定如何操作他
編譯器在編譯過程中便將所有const變量都替換爲了對應的值
默認情況下const便利了僅在文件內有效
非常量引用不能綁定常量對象
引用必須被初始化
當初始化常量引用使用表達式時,要求該表達式能轉換成引用的類型,如果發生轉化,引用綁定的實際上是一個臨時量(引用類型和引用對象類型必須一致的其中一個例外,如果引用不是常量引用的話,對引用的賦值事實上操作的是一個臨時量,而不是代碼中顯式綁定的對象, (指針同理))
*指向常量的指針:類型爲const double等,僅僅是不能通過指針修改所指對象的值,對象可以是非常量,用於存放常量對象的地址
*常量指針:例:int *const a,必須初始化且初始化後其存放的地址不能變
指針本身是常量稱爲頂層const(更一般的,任意對象是常量),指向的對象是常量稱爲底層const(與引用和指針等複合類型的 基本類型部分 有關)
常量表達式:值不會改變並且編譯過程就能確定的值
constexpr類型用於方便編譯器驗證某值是否三常量表達式
constexpr int a = size();當size()是constexpr類型的函數時成立
使用constexpr的類型必須是字面值類型(算術類型,引用,指針(使用時應初始化爲0,nullptr或是存儲與固定地址的對象(定義在函數體之外的對象)))
typedef:類型別名
typedef char *pstring; //pstring 是char類型的指針
const pstring a = 0; //因爲pstring是指針類型,所以a是一個常量指針,不能想當然的理解爲const char* a(指向常量的指針),const是對給定類型的修飾!!!
auto讓編譯器分析表達式類型,必須有初始值
auto a = b + c;
decltype指示符
decltype((i)) 的結果永遠是引用