名稱空間
變體
操作

替換函式

來自 cppreference.com
< cpp‎ | 語言
 
 
C++ 語言
 
 

某些由實現提供的函式定義是“可替換的”。C++ 程式可以提供一個具有可替換函式簽名的定義,稱為“替換函式”。如果提供了替換函式,它將代替實現提供的預設版本。此類替換髮生在程式啟動之前。

如果替換函式的宣告不滿足以下任何條件,則程式格式錯誤,不需要診斷:

  • 它不是 inline
  • 附屬於全域性模組。
  • 它具有 C++ 語言連結
  • 它與可替換函式具有相同的返回型別。
  • 如果可替換函式在標準庫標頭檔案中宣告,則作為該標頭檔案中宣告的重新宣告是有效的。

核心語言

是否可以替換契約違反處理程式 ::handle_contract_violation 是實現定義的。

(C++26 起)

[編輯] 標準庫

以下標準庫函式是可替換的,函式語義的描述適用於 C++ 標準庫定義的預設版本和程式定義的替換函式。

分配函式
(函式) [編輯]
釋放函式
(函式) [編輯]
檢查程式是否在偵錯程式控制下執行
(函式) [編輯]

[編輯] 示例

使用替換分配函式

#include <cstddef>
#include <new>
#include <print>
 
// replacement function
void* operator new(std::size_t count)
{
    std::print("Replaced!");
    return nullptr;
}
 
int main()
{
    int* ptr = new int; // invokes the replacement version defined by the program
}

輸出

Replaced!