LINUX.ORG.RU

Ответ на: комментарий от anonymous
#include <iostream>     // std::cout, std::endl
#include <iomanip>      // std::setw


int main() {

for(int i = 0; i <= 4; ++i) {
   std::cout << i * 1000000000 << std::endl;
   std::cout << std::setw( i * 1000000000 ) << std::endl;
}

return 0;

}

Результат /tmp/TJVLHcbK5r.o 0

1000000000

Segmentation fault

Владимир 123456

anonymous ()
Ответ на: комментарий от anonymous

Вы постоянно пытаетесь модифицировать sample, зачем? Добавление лишних << setw() may or may not изменить ситуацию. Прелесть же не в этом. Есть пример. Вроде тривиальный. Но ведет себя совсем не так как ожидают. И более того - есть ключик компиляции который это фиксит. Вы догадываетесь к чему я виду?

bugfixer ()
Ответ на: комментарий от bugfixer

И?

Ведёт себя именно как ожидается.

Максимальное значение int это 2^31 - 1 aka 2147483647

1000000000 * 3 - тут UB и переполнение.

Всё. Теперь программа может делать всё что угодно.

Где тут что-либо, чего нельзя было ожидать?

fsb4000 ★★★★ ()
Ответ на: комментарий от fsb4000

Всё. Теперь программа может делать всё что угодно. Где тут что-либо, чего нельзя было ожидать?

Ему давно был дан ответ, но у него «что-то свое» …

Владимир 123456

anonymous ()
Ответ на: комментарий от bugfixer

Жду отсылов к стандарту, показывающих что это UB. Мне же больше ничего не надо. А то все же просто «про», куда уж нам, холуям то…

А при чем здесь «холуям».
Вы похихикали над оппонентом и считаете, что вам все можно?

PS: Диалог ведите корректно.

Владимир 123456

anonymous ()
Ответ на: комментарий от bugfixer

А Вы в курсе почему «signed only»?

В С++ ,наверное, потому что совместимость с С. А в С, наверное, потому что С древний язык, и тогда были CPU с разными представлениями signed integers, и если выбирать какое-то одно, то будет оверхед на архитектурах, где представление другое.

В С++20 стали переписывать: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1236r1.html

Но сложение с переполнением всё ещё считается UB. Может в С++23 уберут это и не будет считаться UB.

fsb4000 ★★★★ ()
Последнее исправление: fsb4000 (всего исправлений: 1)
Ответ на: комментарий от fsb4000

тут UB и переполнение. Всё. Теперь программа может делать всё что угодно. Где тут что-либо, чего нельзя было ожидать?

цппшники, наверное, каждый раз перед запуском бинаря в бункер залазят.

anonymous ()
Ответ на: комментарий от anonymous

цппшники, наверное, каждый раз перед запуском бинаря в бункер залазят.

Я на самом деле к другой мысли изначально пытался подвести. Если уж такой тривиальный пример делает не то что от него ожидают - что там в Gentoo и тому подобных пионерских сборках творится - ума не приложу…

bugfixer ()

Где что сдохло ?

Меня лет 11 назад, и «не меня тоже» с такими вопросами а тем более с такими формулировками посылали. а сейчас «спрашивают что как дают готовые решения» ))) вот и выросло поколение без Мыщъха (((

gne4do ()
Ответ на: Где что сдохло ? от gne4do

Re: Где что сдохло ?

а сейчас «спрашивают что как дают готовые решения» )))

Да скучно народу просто, «холодными зимними вечерами» ;) COVID опять же…

вот и выросло поколение без Мыщъха (((

Не знаю, не знаю… К «пионерам» не могу себя отнести никак ;)

bugfixer ()