核心筆記
1. C++98 與 C++11 中 printf 格式差異
%lf 在 C++98 表示 double,C++11 表示 long double。
- C++11 下
double 用 %f 輸出;long double 用 %Lf。
scanf 不變:float 用 %f,double 用 %lf。
2. 默認初始化規則
| 類型 | 全局/靜態 | 局部(非靜態) |
| 內置類型 | 0 | 未定義(垃圾值) |
| 類類型 | 調用默認構造函數 | 調用默認構造函數 |
若類無默認構造函數或被刪除,定義對象不給初值會編譯錯誤。
3. 合成默認構造函數行為
- 成員為類對象 → 調用其默認構造函數。
- 成員為內置類型 → 執行默認初始化(全局 0,局部未定義)。
4. 指向指針的引用定義
int i = 42;
int *p = &i;
int *&r = p; // r 是指向 int* 的引用
5. const 變量的跨文件共享
- 預設
const 僅在當前編譯單元可見(內部鏈接)。
- 跨文件需在一個文件
extern const int a = 100; 定義,其他文件 extern const int a; 聲明。
6. auto vs decltype
| 特性 | auto | decltype |
頂層 const | 忽略 | 保留 |
| 引用類型 | 推導為非引用 | 推導為引用 |
decltype((expr)) | — | 若 expr 為左值,推導為引用 |
7. 範例驗證
const int ci = 42;
auto a = ci; // int
decltype(ci) c = ci; // const int
int &r = i;
auto b = r; // int
decltype(r) d = r; // int&
理解這些細節對寫出正確、可移植的 C++ 代碼至關重要。
- 上一篇文章: HDU 4296 Buildings:貪心排序最小化最大潛在損害值
- 下一篇文章: UVA 757 Gone Fishing:貪心 + 模擬最大化捕魚量
Copyright ©
程式碼之家 All Rights Reserved