首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 引用參數與指針參數的核心區別:能否為空與語義差異

     編輯:程式設計綜合問答

共同點

  • 均可修改實參對象的值
  • 避免大對象拷貝開銷

核心區別

特性指針參數 T* p引用參數 T& r
可為空是 (nullptr)否 (必須綁定合法對象)
重新綁定可指向其他對象 p = &other初始化後不可改變綁定目標
語法調用func(&obj) 顯式取址func(obj) 透明傳遞
函數內訪問p->member / *pr.member 同對象
數組退化自然接受 T*需 T (&arr)[N] 保留長度信息
語義「可選的輸入/輸出參數」「必須存在的別名」

選擇指南

  1. 輸出參數、可選參數 → 指針(調用處 & 明確表達「可能修改」)
  2. 必須存在、不為空、不重綁定 → 引用(代碼更乾淨,編譯器保證非空)
  3. 運算符重載 → 引用(operator+(const T&))
  4. 工廠函數返回新對象 → 指針/智能指針(T* create() 或 unique_ptr)

經典誤區

void bad(T& r) { r = T(); } // 僅修改綁定對象的值,不改變綁定關係
void bad2(T* p) { p = new T(); } // 只改變局部指針指向,外部實參指針不變!

若需在函數內修改指針本身指向,必須傳 T** 或 T*&。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved