替换函数

来自cppreference.com
< cpp‎ | language


 
 
C++ 语言
 
 

特定函数的实现由实现提供,这些函数是可替换函数。C++ 程序可以提供具有可替换函数的签名的定义,它被称为替换函数。使用可替换函数时会用替换函数(如果有提供)替换由实现提供的默认版本。此类替换会在程序启动前发生。

如果替换函数的声明不满足以下任意条件,那么程序非良构,不要求诊断:

  • 它不是内联的。
  • 附着于全局模块。
  • 它具有 C++ 语言链接
  • 它的返回类型与可替换函数相同。
  • 如果可替换函数在标准库标头中声明,那么它在该标头中作为的该声明的重声明时合法。

核心语言

由实现定义约定违背处理函数 ::handle_contract_violation 是否可替换。

(C++26 起)

[编辑] 标准库

以下标准库函数均可替换,并且对函数语义的描述同时适用于 C++ 标准库定义的默认版本和程序定义的替换函数:

分配函数
(函数) [编辑]
解分配函数
(函数) [编辑]
检查程序是否在调试器的控制下运行
(函数) [编辑]

[编辑] 示例

使用替换分配函数:

#include <cstddef>
#include <new>
#include <print>
 
// 替换函数
void* operator new(std::size_t count)
{
    std::print("已替换!");
    return nullptr;
}
 
int main()
{
    int* ptr = new int; // 调用程序定义的替换版本
}

输出:

已替换!