不包含在函數聲明、定義或類定義內的程式文本屬於名字空間作用域(全域作用域)。程式設計師可透過 namespace 定義用戶自訂名字空間,它們嵌套在全域作用域中。
局部作用域的名字解析遵循「由內而外」原則:先在使用該名字的作用域查找,找不到則往外層作用域繼續,直到全域作用域;若仍未找到則報錯。
全域對象與函數在一個程式中只能有一個定義,或有多個完全相同的定義。
未顯式初始化的全域對象會被零初始化。extern 關鍵字用於聲明而非定義對象,承諾該對象在別處定義。
inline 函數或對象的定義(如 extern int ival = 10; 會導致多重定義)。inline 函數可在多文件中重複定義,前提是定義對使用點可見。| 類型 | 宣告形式 | 含義 |
|---|---|---|
| 常量指針 | const int* p / int const* p | 指向的值不可透過該指針修改 |
| 指針常量 | int* const p | 指針本身(地址)不可修改,指向的值可改 |
| 指向常量的常指針 | const int* const p | 指針與指向的值均不可修改 |
inline 用於消除函數調用開銷,適用於小型、高頻函數;編譯器可自行決定是否內聯。register 建議編譯器放入寄存器(現代編譯器通常自動優化,register 關鍵字已弱化)。new 返回指向動態分配對象的指針,內存未初始化(除非使用 new int(0) 等初始化語法)。std::bad_alloc 異常。delete 釋放內存,指針本身不變,成為「懸空指針」;良好習慣是 ptr = nullptr;。auto_ptr(C++98,C++11 棄用,建議用 unique_ptr/shared_ptr)delete 管理的對象。get() 取原始指針、reset() 重置/釋放舊對象並接管新對象、release() 釋放擁有權並返回原始指針。new 分配的指針初始化 auto_ptr。new Type[N] 分配數組,delete[] ptr 釋放。只有第一維可用運行時變量指定大小,其餘維度必須為編譯期常量。
namespace { ... } 內部名字僅在本翻譯單元可見,可替代 static 全域變量/函數。namespace IBM = International_Business_Machines;using ns::name; 引入單一名字;using namespace ns; 將整個名字空間名字引入當前作用域。const/volatile 修飾頂層參數類型時不影響重載區分;但修飾指針/引用指向的類型則影響(如 int* vs const int*)。using 聲明不可指定參數列表;using namespace 使名字空間成員如同在外部聲明。模板提供一套演算法,編譯器根據實參類型自動具現化具體函數,保留強類型檢查與語義,避免巨集的副作用。
template
T min(T a, T b) { return a < b ? a : b; }
// 非類型模板參數
template
T min(T (&arr)[Size]);
throw 可拋出任意類型對象,通常用類封裝異常信息。try 塊包圍可能拋出異常的代碼,後接一組 catch 子句處理特定類型異常。catch;若無匹配則調用 std::terminate()(預設 abort())。catch (...) { throw; } 或修改異常對象後 throw;(需以引用捕獲)。main() 中聲明的變量不可在 catch 子句中直接引用。<algorithm>,透過迭代器存取元素,不依賴具體容器類型。++、--、解引用、比較等操作;分為五類:
+n、-n、[]、比較)vector/deque → 隨機存取;list/set/map → 雙向;stack/queue/priority_queue → 不支援迭代器。// find:在 [first, last) 尋找 val,找到返回迭代器,否則返回 last
template
InIt find(InIt first, InIt last, const T& val);
// sort:預設用 operator<,可傳入比較函數對象(如 greater<> 以降序排列)
sort(vec.begin(), vec.end(), greater());
// 二分查找要求區間有序
lower_bound(first, last, val); // 首個 >= val
upper_bound(first, last, val); // 首個 > val
equal_range(first, last, val); // 返回 pair 等於 val 的區間
// 排列組合
next_permutation(first, last); // 字典序下一個排列
prev_permutation(first, last); // 字典序上一個排列
adjacent_difference、accumulate、inner_product、partial_sum(需 <numeric>)。
定義於 <functional>,分算術、關係、邏輯三類,皆為類模板,如 plus<T>、less<T>、logical_and<T>。
const 容器只能綁定 const_iterator,確保元素不可被修改,類比 const 指針指向 const 對象。