ckd_add
|
Определено в заголовочном файле
<stdckdint.h>
|
||
|
template
<
class
type1,
class
type2,
class
type3
>
bool ckd_add ( type1 * result, type2 a, type3 b ) ; |
(начиная с C++26) | |
Вычисляет сложение x + y и сохраняет результат в * result . Сложение выполняется так, как если бы оба операнда были представлены в знаковом целочисленном типе с бесконечным диапазоном, после чего результат преобразовывался из этого целочисленного типа в type1 . Если значение, присвоенное * result , корректно представляет математический результат операции, возвращается false . В противном случае возвращается true . В этом случае значение, присвоенное * result , является математическим результатом операции, обернутым по ширине * result .
СодержаниеПараметры
Возвращаемое значениеfalse если значение, присвоенное * result корректно представляет математический результат сложения, true в противном случае. Примечание
Функция-шаблон
Каждый из типов type1 , type2 и type3 является cv-неквалифицированным знаковым или беззнаковым целочисленным типом. Рекомендуется выводить диагностическое сообщение, если type2 или type3 не являются подходящими целочисленными типами, или если * result не является изменяемым lvalue подходящего целочисленного типа. ПримерЗапустить этот код #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");
}
Вывод: 14 + 28 => 42 (OK)
14 + 65535 => 13 (Overflow)
14 + 65535 => 65549 (OK)
Ссылки
Смотрите также
| ||||||||||||