Сравнение знаков в C++
Функция cmp_less сравнивает знаковое и беззнаковое целое без опасного приведения.
Обычный оператор < в такой паре
может превратить отрицательное в большое
положительное. Шаблон из <utility>
сравнивает два значения как величины с
учетом знака и не превращает знаковое
в беззнаковое заранее. Запишем int
-1 и unsigned 1 и выведем
результат:
#include <utility>
#include <iostream>
int signed_val = -1;
unsigned unsigned_val = 1;
std::cout << std::cmp_less(signed_val, unsigned_val) << "\n";
Рядом выведем тот же ответ и результат
прямого < для сравнения:
#include <utility>
#include <iostream>
int a = -1;
unsigned b = 1;
std::cout << std::cmp_less(a, b) << "\n";
std::cout << (a < b) << "\n";
Задайте int x = -5 и
unsigned int y = 3.
Выведите 1, если std::cmp_less(x, y)
истинно, иначе 0.