ckd_add
| Definido en el archivo de encabezado <stdckdint.h>
|
||
template< class type1, class type2, class type3 > bool ckd_add( type1* result, type2 a, type3 b ); |
(desde C++26) | |
Calcula la suma x + y y almacena el resultado en *result. La suma se realiza como si ambos operandos estuvieran representados en un tipo entero con signo de rango infinito, y el resultado se convierte luego de este tipo entero a type1. Si el valor asignado a *result representa correctamente el resultado matemático de la operación, devuelve false. De lo contrario, devuelve true. En este caso, el valor asignado a *result es el resultado matemático de la operación envuelto al ancho de *result.
Parámetros
| a, b | - | Valores enteros. |
| result | - | Dirección donde se debe almacenar el resultado. |
Valor de retorno
false si el valor asignado a *result representa correctamente el resultado matemático de la suma, true en caso contrario.
Nota
La plantilla de función ckd_add tiene la misma semántica que la macro genérica de tipo correspondiente con el mismo nombre especificada en C23.
Cada uno de los tipos type1, type2, y type3 es un tipo entero con signo o sin signo no calificado por cv.
Se recomienda producir un mensaje de diagnóstico si type2 o type3 no son tipos de enteros adecuados, o si *result no es un l-valor modificable de un tipo entero adecuado.
Ejemplo
Vista previa en Compiler Explorer.
#include <cstdint>
#include <limits>
#include <print>
#include <stdckdint.h>
int main()
{
const std::uint8_t x{14};
std::uint16_t y{28}, result1{};
bool overflow{};
overflow = ckd_add(&result1, x, y);
std::println("{} + {} => {} ({})", x, y, result1, overflow ? "desbordamiento" : "de acuerdo");
y = std::numeric_limits<std::uint16_t>::max();
overflow = ckd_add(&result1, x, y);
std::println("{} + {} => {} ({})", x, y, result1, overflow ? "desbordamiento" : "de acuerdo");
std::uint32_t result2{};
overflow = ckd_add(&result2, x, y);
std::println("{} + {} => {} ({})", x, y, result2, overflow ? "desbordamiento" : "de acuerdo");
}
Posible salida:
14 + 28 => 42 (de acuerdo)
14 + 65535 => 13 (desbordamiento)
14 + 65535 => 65549 (de acuerdo)
Referencias
- Estándar C++26 (ISO/IEC 14882:2026):
- 29.11.2 Operaciones de enteros comprobadas
Véase también
| Operación de resta comprobada entre dos enteros. (plantilla de función) | |
| Operación de multiplicación con comprobación de desbordamiento entre dos enteros. (plantilla de función) | |
Documentación de C para ckd_add
| |