ckd_add
|
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)
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
|
|