替换函数
来自 cppreference.cn
某些函数的定义由实现提供,这些函数是可替换的。 C++ 程序可以提供具有可替换函数签名的定义,称为替换函数。 如果提供了替换函数,则将使用它来代替实现提供的默认版本。 这种替换发生在程序启动之前。
如果替换函数的声明不满足以下任何条件,则程序是非良构的,不需要诊断
- 它不是内联的。
- 它附加到全局模块。
- 它具有 C++ 语言链接。
- 它具有与可替换函数相同的返回类型。
- 如果可替换函数在标准库头文件中声明,则它作为该头文件中声明的重新声明是有效的。
核心语言contract-violation handler 是否可替换是实现定义的。 |
(C++26 起) |
[编辑] 标准库
以下标准库函数是可替换的,函数语义的描述适用于 C++ 标准库定义的默认版本和程序定义的替换函数
分配函数 (函数) | |
释放函数 (函数) | |
(C++26) |
检查程序是否在调试器的控制下运行 (函数) |
[编辑] 示例
使用替换分配函数
运行此代码
#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!