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

高品質 C++/C 程式設計指南:函數多載、內聯、extern "C" 與名稱修飾

     編輯:VC 教學

多載起源與實現

  • 自然語言一詞多義(重載),靠上下文消歧。
  • C++ 編譯器依參數型別/個數/順序產生內部修飾名(Name Mangling),如 _eat_beef, _eat_fish。
  • 回傳型別不參與多載區分:void f(); int f(); 若忽略回傳值則無法消歧。

構造函數必須多載

構造函數與類別同名,唯一名稱,若需多種初始化方式只能靠多載。

呼叫 C 函數:extern "C"

C 編譯器不修飾名(_foo),C++ 修飾為 _foo_int_int。直接 #include C 標頭會連結失敗。


extern "C" {
    void foo(int x, int y);
    #include "my_c_header.h"
}

告訴 C++ 編譯器以 C 連結規格尋找符號。標準庫標頭已內建處理。

作用域區分:全域函數 vs 成員函數


void Print();           // 全域
class A { void Print(); }; // 成員

// 成員函數中呼叫全域 Print 需加 ::
::Print(); // 明確指定全域作用域

同名不構成多載,因作用域不同。

多載最佳實務

  • 語意相關、行為一致的操作才多載(如 Print(int), Print(double), Print(String))。
  • 避免因隱式轉換導致歧義(見下章)。
  • 內聯函數(inline)適合極小、高頻呼叫函數;過度內聯會膨脹代碼、增加指令快取壓力。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved