## 第2章 變量和基本類型
### 2.2.1 變量定義
定義于任何函數之外的變量將被初始化為0。
定義在函數體內部的內置類型變量將不被初始化。
### 2.2.4 名字的作用域
當作用域操作符(:: )的左側為空時,即視為向全局作用域發出請求獲取作用域操作符右側名字對應的變量。
### 2.3.1 引用
除以下兩種例外情況,其他所有引用的類型都要與之綁定的對象嚴格匹配,而且,匹配只能綁定在對象上,而不能與字面值或者某個表達式的計算結果綁定在一起:
A) 初始化常量引用時允許用任意表達式作為初始值;
B) 基類的引用可以綁定到派生類對象上。
### 2.3.2 指針
除以下兩種例外情況,其他所有指針的類型都要與它所指向的對象嚴格匹配:
A) 允許令一個指向常量的指針指向一個非常量對象;
B) 基類的指針可以綁定到派生類對象上。
---
C++11新標準引入字面值**nullptr**,它可被轉換成任意其他的指針類型,例如可以用來初始化指針。
### 2.4 const限定符
用extern加以限定,可使其能被其他文件使用。
建議:對于const變量不管是聲明還是定義都應該添加extern關鍵字。
### 2.4.4 constexpr和常量表達式
**constexpr**把它所定義的對象置為了**頂層const**。即用來修飾指針時,僅對指針本身有效。
### 2.5.2 auto類型說明符
**auto**一般會忽略掉**頂層const**,而保留**底層const**。
### 2.5.3 decltype類型指示符
**decltype**不會忽略頂層const和引用 。
如果表達式的內容是解引用指針,則**decltype**將得到引用類型。
`decltype((variable))`得到的結果一定是引用。
```cpp
/* 練習2.37 —— 賦值表達式會生成引用類型 */
int a = 3, b = 4;
decltype(a = b) d = a;//此處d是a的引用
```
### 2.6.3 編寫自己的頭文件
預處理變量無視c++語言中關于作用域的規則。