ckd_sub
|
Défini dans l'en-tête
<stdckdint.h>
|
||
|
template
<
class
type1,
class
type2,
class
type3
>
bool ckd_sub ( type1 * result, type2 a, type3 b ) ; |
(depuis C++26) | |
Calcule la soustraction x - y et stocke le résultat dans * result . La soustraction est effectuée comme si les deux opérandes étaient représentés dans un type entier signé avec une plage infinie, puis le résultat était 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 .
ContenuParamètres
Valeur de retourfalse si la valeur assignée à * result représente correctement le résultat mathématique de la soustraction, true sinon. Note
Le modèle de fonction
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é. ExempleExécuter ce code #include <cstdint>
#include <limits>
#include <print>
#include <stdckdint.h>
int main()
{
int16_t result1{};
constexpr std::int8_t x1{-2};
constexpr std::int16_t y1{1};
const bool underflow1{ckd_sub(&result1, x1, y1)};
std::println("{} - {} == {} ({})", x1, y1, result1, underflow1 ? "Underflow" : "OK");
int16_t result2{};
constexpr std::int8_t x2{-2};
constexpr std::int16_t y2{std::numeric_limits<std::int16_t>::max()};
const bool underflow2{ckd_sub(&result2, x2, y2)};
std::println("{} - {} == {} ({})", x2, y2, result2, underflow2 ? "Underflow" : "OK");
int32_t result3{};
constexpr std::int8_t x3{-2};
constexpr std::int16_t y3{std::numeric_limits<std::int16_t>::max()};
const bool underflow3{ckd_sub(&result3, x3, y3)};
std::println("{} - {} == {} ({})", x3, y3, result3, underflow3 ? "Underflow" : "OK");
}
Sortie : -2 - 1 == -3 (OK)
-2 - 32767 == 32767 (Underflow)
-2 - 32767 == -32769 (OK)
Références
Voir aussi
| ||||||||||||