Namespaces
Variants

ckd_add

From cppreference.net
Definiert im Header <stdckdint.h>
template < class type1, class type2, class type3 >
bool ckd_add ( type1 * result, type2 a, type3 b ) ;
(seit C++26)

Berechnet die Addition x + y und speichert das Ergebnis in * result . Die Addition wird so durchgeführt, als ob beide Operanden in einem vorzeichenbehafteten Ganzzahltyp mit unendlichem Wertebereich dargestellt wären, und das Ergebnis dann von diesem Ganzzahltyp in type1 konvertiert wurde. Wenn der zugewiesene Wert für * result das mathematische Ergebnis der Operation korrekt darstellt, wird false zurückgegeben. Andernfalls wird true zurückgegeben. In diesem Fall ist der zugewiesene Wert für * result das mathematische Ergebnis der Operation, das auf die Breite von * result umgewrappt wurde.

Inhaltsverzeichnis

Parameter

a, b - Ganzzahlwerte
result - Adresse, an der das Ergebnis gespeichert werden soll

Rückgabewert

false wenn der Wert, der * result zugewiesen wurde, das mathematische Ergebnis der Addition korrekt darstellt, true andernfalls.

Hinweis

Die Funktionsvorlage ckd_add hat dieselbe Semantik wie das entsprechende typgenerische Makro mit demselben Namen, das in C23 spezifiziert ist.

Jeder der Typen type1 , type2 und type3 ist ein cv-unqualifizierter vorzeichenbehafteter oder vorzeichenloser Ganzzahltyp.

Es wird empfohlen, eine Diagnosemeldung auszugeben, wenn type2 oder type3 keine geeigneten Integer-Typen sind, oder wenn * result kein modifizierbarer Lvalue eines geeigneten Integer-Typs ist.

Beispiel

Compiler Explorer Vorschau .

#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 ? "Overflow" : "OK");
    y = std::numeric_limits<std::uint16_t>::max();
    overflow = ckd_add(&result1, x, y);
    std::println("{} + {} => {} ({})", x, y, result1, overflow ? "Overflow" : "OK");
    std::uint32_t result2{};
    overflow = ckd_add(&result2, x, y);
    std::println("{} + {} => {} ({})", x, y, result2, overflow ? "Overflow" : "OK");
}

Mögliche Ausgabe:

14 + 28 => 42 (OK)
14 + 65535 => 13 (Overflow)
14 + 65535 => 65549 (OK)
**Übersetzungsdetails:** - "preview" → "Vorschau" - "Run this code" → "Code ausführen" - "Possible output:" → "Mögliche Ausgabe:" - C++ Code und Ausgabe wurden nicht übersetzt (gemäß den Anweisungen) - HTML-Tags und Attribute wurden unverändert beibehalten - Alle Formatierungen wurden erhalten

Referenzen

  • C++26-Standard (ISO/IEC 14882:2026):
  • 29.11.2 Geprüfte Ganzzahloperationen

Siehe auch

(C++26)
Geprüfte Subtraktionsoperation für zwei Ganzzahlen
(Funktionsschablone)
(C++26)
Geprüfte Multiplikationsoperation für zwei Ganzzahlen
(Funktionsschablone)
C-Dokumentation für ckd_add