ckd_add
|
Défini dans l'en-tête
<stdckdint.h>
|
||
|
template
<
class
type1,
class
type2,
class
type3
>
bool ckd_add ( type1 * result, type2 a, type3 b ) ; |
(depuis C++26) | |
Calcule l'addition x + y et stocke le résultat dans * result . L'addition est effectuée comme si les deux opérandes étaient représentés dans un type entier signé avec une plage infinie, et le résultat était ensuite converti de ce type entier vers type1 . Si la valeur assignée à * result représente correctement le résultat mathématique de l'opération, elle retourne false . Sinon, elle retourne true . Dans ce cas, la valeur assignée à * result est le résultat mathématique de l'opération enroulé sur la largeur de * result .
Table des matières |
Paramètres
| a, b | - | valeurs entières |
| result | - | adresse où le résultat doit être stocké |
Valeur de retour
false si la valeur assignée à * result représente correctement le résultat mathématique de l'addition, true sinon.
Note
Le modèle de fonction
ckd_add
possède la même sémantique que la
macro générique de type
correspondante du même nom spécifiée dans
C23
.
Chacun des types type1 , type2 , et type3 est un type entier signé ou non signé sans qualificatif cv.
Il est recommandé de produire un message de diagnostic si type2 ou type3 ne sont pas des types entiers appropriés, ou si * result n'est pas une lvalue modifiable d'un type entier approprié.
Exemple
Compiler Explorer aperçu .
#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"); }
Sortie possible :
14 + 28 => 42 (OK) 14 + 65535 => 13 (Overflow) 14 + 65535 => 65549 (OK)
Références
- Norme C++26 (ISO/CEI 14882:2026) :
-
- 29.11.2 Opérations entières vérifiées
Voir aussi
|
(C++26)
|
opération de soustraction vérifiée sur deux entiers
(modèle de fonction) |
|
(C++26)
|
opération de multiplication vérifiée sur deux entiers
(modèle de fonction) |
|
Documentation C
pour
ckd_add
|
|