Namensräume
Varianten
Aktionen

Ersetzungsfunktionen

Von cppreference.com
< cpp‎ | Sprache
 
 
C++ Sprache
Allgemeine Themen
Kontrollfluss
Bedingte Ausführungsaussagen
if
Iterationsanweisungen (Schleifen)
for
Bereichs-for (C++11)
Sprunganweisungen
Funktionen
Funktionsdeklaration
Lambda-Funktionsausdruck
inline-Spezifizierer
Dynamische Ausnahmespezifikationen (bis C++17*)
noexcept-Spezifizierer (C++11)
Ausnahmen
Namensräume
Typen
Spezifizierer
const/volatile
decltype (C++11)
auto (C++11)
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Speicherdauer-Spezifizierer
Initialisierung
Ausdrücke
Alternative Darstellungen
Literale
Boolesch - Ganzzahl - Gleitkommazahl
Zeichen - String - nullptr (C++11)
Benutzerdefinierte (C++11)
Dienstprogramme
Attribute (C++11)
Typen
typedef-Deklaration
Typalias-Deklaration (C++11)
Umwandlungen
Speicherzuweisung
Klassen
Klassenspezifische Funktionseigenschaften
explicit (C++11)
static

Spezielle Member-Funktionen
Templates
Sonstiges
 
 

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.

Kernsprache

Es 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) [bearbeiten]
Deallokationsfunktionen
(Funktion) [bearbeiten]
prüft, ob ein Programm unter der Kontrolle eines Debuggers ausgeführt wird
(Funktion) [bearbeiten]

[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!