| 傳遞方式 | 記憶體行為 | 可修改實參 | 典型開銷 | 適用場景 |
|---|---|---|---|---|
| 值傳遞 | 棧上拷貝副本 | 否(修改副本) | 拷貝建構成本 | 小型物件、需隔離副作用 |
| 指標傳遞 | 傳遞地址值(指標本身按值傳遞) | 是(透過解引用) | 指標大小(4/8 位元組) | 需表達「可為空」、C 風格介面、陣列衰減 |
| 引用傳遞 | 實參別名,無額外儲存 | 是(直接操作實參) | 指標大小(底層實現) | 大型物件、需修改實參、運算子多載、非空保證 |
nullptr,需防禦性檢查。if (p) 檢查。p = &other)。const 指標。引用通常以指標實現,但語義層面是別名。編譯器對引用優化更激進(如直接替換為實參地址)。
C++11 引入右值引用(T&&)與引用摺疊規則,配合 std::forward 實現完美轉發,保留實參值類別(左值/右值)與 const/volatile 資格。此為現代 C++ 泛型程式設計基石。
T& 或 const T&。T* 或 std::optional<T&>(C++17)。sizeof <= 2*pointer 且 trivial copy):按值傳遞,簡潔且編譯器優化良好。const T&,輸出用 T& 或 T*(輸出參數慣例常用指標)。T&& + std::forward 實現完美轉發。int& r = *reinterpret_cast<int*>(0) 仍可製造空引用,屬未定義行為。理解值、指標、引用的語義差異,結合「非空保證」、「所有權表達」、「拷貝成本」三個維度選擇,能寫出更安全、高效、可維護的 C++ 代碼。