Replacement functions
| General topics | ||||||||||||||||
| Flow control | ||||||||||||||||
| Conditional execution statements | ||||||||||||||||
| Iteration statements (loops) | ||||||||||||||||
|
||||||||||||||||
| Jump statements | ||||||||||||||||
| Functions | ||||||||||||||||
| Function declaration | ||||||||||||||||
| Lambda function expression | ||||||||||||||||
inline
specifier
|
||||||||||||||||
| Dynamic exception specifications ( until C++17* ) | ||||||||||||||||
noexcept
specifier
(C++11)
|
||||||||||||||||
| Exceptions | ||||||||||||||||
| Namespaces | ||||||||||||||||
| Types | ||||||||||||||||
| Specifiers | ||||||||||||||||
|
||||||||||||||||
| Storage duration specifiers | ||||||||||||||||
| Initialization | ||||||||||||||||
| Expressions | ||||||||||||||||
| Alternative representations | ||||||||||||||||
| Literals | ||||||||||||||||
| Boolean - Integer - Floating-point | ||||||||||||||||
| Character - String - nullptr (C++11) | ||||||||||||||||
| User-defined (C++11) | ||||||||||||||||
| Utilities | ||||||||||||||||
| Attributes (C++11) | ||||||||||||||||
| Types | ||||||||||||||||
typedef
declaration
|
||||||||||||||||
| Type alias declaration (C++11) | ||||||||||||||||
| Casts | ||||||||||||||||
| Memory allocation | ||||||||||||||||
| Classes | ||||||||||||||||
| Class-specific function properties | ||||||||||||||||
|
||||||||||||||||
| Special member functions | ||||||||||||||||
|
||||||||||||||||
| Templates | ||||||||||||||||
| Miscellaneous | ||||||||||||||||
| Declarations | ||||
| Function declaration | ||||
| Function parameter list | ||||
| Function definition | ||||
| Function contract specifiers (C++26) | ||||
| Default arguments | ||||
| Variadic arguments | ||||
inline
specifier
|
||||
| Lambda expressions (C++11) | ||||
| Coroutines (C++20) | ||||
| Replacement functions | ||||
| Function calls | ||||
| Argument-Dependent Lookup (ADL) | ||||
| Function-call operator | ||||
| Function objects | ||||
| Overloading | ||||
| Overload resolution | ||||
| Operator overloading | ||||
| Address of an overload set |
Ciertas funciones para las cuales la implementación suministra una definición son reemplazables . Un programa C++ puede proporcionar una definición con la firma de una función reemplazable, llamada función de reemplazo . La función de reemplazo, si se proporciona, se utiliza en lugar de la versión predeterminada suministrada por la implementación. Dicho reemplazo ocurre antes del inicio del programa.
Si una declaración de la función de reemplazo no satisface alguna de las siguientes condiciones, el programa está mal formado, no se requiere diagnóstico:
- No es inline .
- Está attached al módulo global.
- Tiene language linkage de C++.
- Tiene el mismo tipo de retorno que la función reemplazable.
- Si la función reemplazable está declarada en un standard library header , sería válida como una redeclaración de la declaración en ese encabezado.
Lenguaje del núcleoEstá definido por la implementación si el manejador de violación de contrato :: handle_contract_violation es reemplazable. |
(desde C++26) |
Biblioteca estándar
Las siguientes funciones de la biblioteca estándar son reemplazables, y la descripción de la semántica de la función se aplica tanto a la versión predeterminada definida por la biblioteca estándar de C++ como a la función de reemplazo definida por el programa:
|
funciones de asignación
(función) |
|
|
funciones de liberación
(función) |
|
|
(C++26)
|
verifica si un programa se está ejecutando bajo el control de un depurador
(función) |
Ejemplo
Utiliza una función de asignación de reemplazo:
#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 }
Salida:
Replaced!