問題:`void f(int)` 與 `void f(const int)` 能否構成重載?
void f(int x); // 簽名: f(int)
void f(const int x); // 簽名: f(int) → 相同,編譯錯誤:重複定義
原因:呼叫端傳遞的是 **右值/值副本**,`const` 只限制函式內部不可修改參數,不影響呼叫約定與名稱修飾。
void f(int& x); // 簽名: f(int&)
void f(const int& x); // 簽名: f(const int&) → 不同,**可重載**
void g(int* p);
void g(const int* p); // 亦可重載
此時 `const` 影響 **型別系統**,`int&` 與 `const int&` 為不同型別,可區分 `lvalue`/`const lvalue`。
void f(int&); // 1
void f(const int&); // 2
int a = 1;
f(a); // 呼叫 1 (非 const lvalue 精確匹配)
f(10); // 呼叫 2 (右值只能綁定 const lvalue reference)
f(static_cast(a)); // 呼叫 2
記住:**值參數的 `const` 是實作細節,不屬於介面契約;引用/指標的 `const` 才是型別一部分,可用於重載區分。**