long long diff = дает long long переменную auto diff = дает undigned long long Вот со второй манипулятор не работает (очевидно решили что если программист работает с неподписанными типами, пусть сам плюсик рисует).
Да, уже расковыряли это... Мне ещё нравится ответ нейросети. В нём - всё, что нужно знать о нейросетях.
Сергей
Гений
(60598)
Папа, На cplusplus описание не очевидное: "every non-negative numerical value". Выходит что 5U - это уже не "не негативное" значение...
это как-то контр-интуитивно. cppreference пишут, что showpos включает показ + для положительных значений, беззнаковый тип как раз представляет положительные значения.
Сергей
Гений
(60598)
/bin/laden, Да, для кожаных мешков unsigned - это положительные, а для стальных задов - неподписанные )
ок, где в стандарте это указано? да и какая нафиг разница, в оператор передается уже результат вычисления, почему оно не в состоянии оценить этот результат? какая то тупость.
Rainbow666
Просветленный
(21234)
/bin/laden, https://eel.is/c++draft/ нет явного указания на то, что std::showpos должен игнорироваться для rvalue-выражений.
просто плюс юзать для prvalue
std::cout << std::showpos << +( (long long)b - a );
? Что делает std::showpos в C++? std::showpos — это манипулятор потока, который включает отображение знака + перед положительными числами при выводе через std::cout.
? Почему var = +2, а inline = 2? Разберём строчки кода:
cpp Копировать Редактировать long long diff = (long long)b - a; // b = 2, a = 0 → diff = 2
std::cout << " var: " << std::showpos << diff << std::endl; std::cout << "inline: " << std::showpos << (long long)b - a << std::endl; Разница — в порядке применения std::showpos:
✅ Первая строка: cpp Копировать Редактировать std::cout << std::showpos << diff; std::showpos применяется к diff, который — готовое значение 2
результат: +2
❌ Вторая строка: cpp Копировать Редактировать std::cout << std::showpos << (long long)b - a; Здесь важна приоритетность операторов!