首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

《C++ Primer》第 7 章:函數核心筆記

     編輯:C++ 入門

函數定義與聲明

方式語法特點
值傳遞void f(int x)拷貝實參,修改不影響原值
引用傳遞void f(int &x)別名,可修改實參,避免拷貝大對象
const 引用void f(const int &x)只讀訪問,接受字面值/臨時對象
指針傳遞void f(int *p)可為空,需解引用,傳統 C 風格


返回值

  • 返回引用時,**不得返回局部變量引用**(懸空引用)。
  • 返回值優化(RVO/NRVO)可消除拷貝。
  • main 返回 int,無 return 默認返回 0。

函數重載

  • 同名函數,參數列表不同(類型、個數、順序)。
  • 返回類型**不能**作為重載依據。
  • const 參數可區分重載:f(int&) vs f(const int&)。

默認參數

inline int max(int a, int b) { return a>b?a:b; }
  • 建議編譯器展開調用點,避免函數調用開銷。
  • 定義需在調用前可見(通常放頭文件)。
  • 遞歸、複雜控制流函數通常不內聯。

constexpr 函數 (C++11)

int (*pf)(int); // 函數指針
function ff; // 類型擦除,可存 lambda/bind/函數指針

遞歸

  • 基準情況 + 遞歸步驟。
  • 尾遞歸優化(編譯器支持時)可轉為迭代,避免棧溢出。

最佳實踐

  1. 參數傳遞:大對象用 const T&,需修改用 T&,小對象(int, 指針)用值傳遞。
  2. 單一職責:函數功能單一,名稱清晰表達意圖。
  3. 斷言前置條件:assert(ptr != nullptr)。
  4. 異常安全:資源用 RAII,函數要么完成要么回滾(強異常安全)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved