Ersetzungsfunktionen
Bestimmte Funktionen, für die die Implementierung eine Definition bereitstellt, sind ersetzbar . Ein C++-Programm kann eine Definition mit der Signatur einer ersetzbaren Funktion bereitstellen, die als Ersetzungsfunktion bezeichnet wird. Die Ersetzungsfunktion wird, sofern vorhanden, anstelle der von der Implementierung bereitgestellten Standardversion verwendet. Ein solcher Ersatz erfolgt vor Programmstart.
Wenn eine Deklaration der Ersetzungsfunktion keine der folgenden Bedingungen erfüllt, ist das Programm ill-formed, keine Diagnose erforderlich
- Sie ist nicht inline.
- Sie ist dem globalen Modul zugeordnet.
- Sie hat die C++ Language Linkage.
- Sie hat denselben Rückgabetyp wie die ersetzbare Funktion.
- Wenn die ersetzbare Funktion in einem Standardbibliotheks-Header deklariert ist, wäre sie als Neudeklaration der Deklaration in diesem Header gültig.
KernspracheEs liegt im Ermessen der Implementierung, ob der Vertragsverletzungs-Handler ::handle_contract_violation ersetzbar ist. |
(seit C++26) |
[bearbeiten] Standardbibliothek
Die folgenden Standardbibliotheksfunktionen sind ersetzbar, und die Beschreibung der Funktionssemantik gilt sowohl für die von der C++-Standardbibliothek definierte Standardversion als auch für die vom Programm definierte Ersetzungsfunktion
| Allokationsfunktionen (Funktion) | |
| Deallokationsfunktionen (Funktion) | |
| (C++26) |
prüft, ob ein Programm unter der Kontrolle eines Debuggers ausgeführt wird (Funktion) |
[bearbeiten] Beispiel
Verwendet eine ersetzbare Allokationsfunktion
#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 }
Ausgabe
Replaced!