Во-первых, не все виды неопределённого поведения диагностируются компилятором. Garbage In - garbage out.
Во-вторых, некоторые очевидные случаи диагностируются, и компилятор пишет по этому поводу варнинги. Просто эскалируйте варнинги до ошибок, и будет щасте.
В-третьих, некоторые очевидные случаи компилятор трактует, как заведомо невозможные, решая задачу покрытия кода. Не компилировать вообще он не имеет права (синтаксически-то программа well-formed), но может нафигачить туда произвольный мусор. В частности, может нафигачить туда ловушек. Просто соберите проект с санитайзерами (конкретно, с ubsan), и тогда эти очевидные случаи будут взрываться немедленно и предсказуемо, а не творить дичь.
В-четвёртых, на некоторую дичь у человека и у компилятора (точнее, у человеков: прикладного разработчика, разработчика компилятора и авторов стандарта) могут оказаться разные взгляды. И тут кто кого переспорит.
Самые яркие примеры последнего
this == nullptr. По стандарту невозможно, но активно эксплуатируется некоторыми легаси-библиотеками (MFC и ATL/WTL, например). Поэтому MSVC никогда не будет оптимизировать это место, а вот clang на определённых режимах сделает с большим удовольствием.
Арифметика и контроль переполнений (как через INT_MAX, так и за границы массивов) - традиционное для всех компиляторов (начиная с фортрана) место для жесточайших оптимизаций: упрощение формул, раскрутка циклов, вот это всё. И только пользователь может разъяснить: "да, в этом месте я никогда не вызову функцию, вылезающую за диапазон", или "ой я здесь имел в виду арифметику в кольце остатков", или "да не разыменовываю я! мне просто удобнее взять указатели далеко за границу вместо переводов в индексы и обратно"
union и всякие поздние инициализации. Специально для пуристов в стандарт затащили функцию "прачечная" std::launder, там чёрт ногу сломит в правилах времени жизни. Вот только весь легаси код, написанный до 2017 года, про эту прачечную не знает. Заставить переписывать?
Шевчук был ньюфагом, когда в 1980 году основал группу по мотивам скандала двадцатилетней давности. Вот тогдашние химики, слушая рокеров, думали: "господи, при чём тут эти древние инсектициды, какие же мы старпёры".
Заберите ваш возврат обратно. Это вы пытаетесь всё время сделать подмену. Неуспешно пытаетесь.
Вы выдвинули критерий про езду на собственном автопроме? Выдвинули. Я вам показал пример. Вы пытаетесь парировать это вопросами розничной цены. Ещё что-нибудь придумаете. Лишь бы не признать, что облажались в самом начале разговора.
Сами себя и оскорбляете. Признались бы, что облажались, и дело с концом.
С критериями успешности демократии вы тоже облажались, кстати.
А это здесь при чём? Первые лица Советского Союза могли хоть на служебных машинах кататься, хоть - если им совесть и наглость позволяла - в личное владение приобрести. И чайки и зимы, кстати, как-то покупались. Да, по мутным схемам, но тем не менее. А уж волгу - машину начальников среднего звена - купить, хоть официально за 10000р, хоть у перекупов за двойную цену - вообще как нефиг делать.
И государство финансировало развитие премиального автопрома, и само плодами этого развития пользовалось. Что не так-то?
Вы выдвинули критерий про первых лиц, я вам по этому критерию нашёл такую страну. Если вам ваш собственный критерий не нравится, - идите и предъявляйте претензии самому себе, что не умеете формулировать мысли до того, как лезете в дискуссию.
Поехали отмазки. Молдавия слишком молодая, спорные территории, проклятые оккупанты.
Грецию кто оккупировал? Сколько лет прошло со времени диктатуры чёрных полковников? А Испании, видимо, лично Франко подсуропил?
Но при этом Германии и Японии ни нацистское прошлое не помешало развить экономику, ни современная оккупационная армия США? Кстати, Япония тоже вон считает, что часть территории оккупирована вовсе не американцами.
А про "кандидат в Евросоюз" - этой морковкой, например, Турцию десятилетиями кормят, так что нечего хвастаться. Это не ачивка, а какой-то позор.
В общем, завязывайте, вы не умеете в агитацию и пропаганду, ваши объяснения несостоятельны от слова вообще.
Нуу началось, сова трещит и глобус гнётся. Давайте примеры поближе.
Демократическая Молдавия. Или там Майя Санду - гибридный диктатор?
Страны PIGS, неспроста так названные и выделенные в особый список прямо внутри Евросоюза. У греков гибридная диктатура? У испанцев король правит миром, не привлекая внимания санитаров? Тогда почему Британию и Нидерланды туда не включили?
Вот не надо тащить в кучу политический и экономический строй. Демократические страны включают в себя и лидеров, и откровенных лузеров. Берём любую африканскую или латиноамериканскую страну, и что, сильно им помогла демократия?
А уж "например" - вообще входит в клинч с вашим же первым абзацем. Первые лица Советского Союза ездили на зилах и чайках. И какой из этого следует вывод делать, по-вашему?
В группе, если мы называем операцию умножением, то и умножение, и обратное к нему деление, даёт элемент в том же множестве. Просто потому, что это группа.
Рациональные / алгебраические / вещественные / комплексные "разы", если выколоть 0, образуют группу.
Целые "разы", естественно, образуют лишь полугруппу, деление там определено частично.
Природоведение в первом-втором классе проходят! Шишечки, жёлуди там всякие вообще на уроках труда. К восьмому классу дети уже подготовлены о том, что у цветочков и белочек всё то же самое.
Безразмерные величины тем и хороши, что их произведение по-прежнему безразмерное.
Умножить на N раз, на ещё M раз - даст эх на MN-ого раз.
Операторы масштаба-и-поворота - это такое обобщение "раз" в векторном пространстве. Естественно, что они живут в своей собственной группе по умножению, а в группе размерность не может возрастать, произведение элементов - элемент того же множества.
Но если комплексное число представляет какую-нибудь размерную величину, то умножать такие величины можно с умножением размерностей.
Самое простое: комплексные ток, напряжение, сопротивление и мощность. Умножайте сколько угодно. Хотя можете помыслить об этих величинах как о размерной амплитуде и безразмерной нормированной комплексной фазе.
У авторов конкретного документа могут быть специфические вкусы. Например, выберут вырвиглазный шрифт (учёные это иногда любят), или сверстают буклет, чтобы в коробке с товаром красивенько смотрелось. Или понапихают this page is intentionally left blank. Сиди, скролли. Даже на компе читать неприятно, а на телефоне - тем паче.
Если вы хаотично и бездумно смешиваете знаковые и беззнаковые, разной точности и разрядности, - то вам это auto или отказ от него - вообще не помеха для того, чтобы накосячить.
Ну вот написали auto i = arr.size()-2, а если бы написали там size_t i = arr.size()-2, вам что, стало бы легче? Или если бы вы сделали проверку вида if (arr.size()-2 < 0) вместо якобы эквивалентной if (arr.size() < 2) ? Говнокодить - так уж говнокодить до конца. А long long - это вообще что было? Правильный тип в данном случае - это ptrdiff_t. Который может быть, а может и не быть long long.
Опять же, если вы серьёзно следите за погрешностями в плавающей арифметике, то уж как-нибудь соблюдёте чистоту рук, и у вас в каждом конкретном месте auto будет резолвиться в тот тип, который вы ждёте и который вам очевиден. Например, вы договорились везде использовать float, чисто для детерминизма, чтобы программа грешила одним и тем же способом. (И всё равно она будет варьировать - если от оптимизации зависит порядок вычислений, а вы это пустили на самотёк).
А чтобы вы меньше лажали, форсируйте варнинги компилятора до ерроров.
Сверхтекучий жидкий гелий состоит из смеси двух фаз - истинно сверхтекучего гелия и просто жидкого. Это как смесь воды со снегом. Когда весь истинно сверхтекучий утечёт и останется только жидкий, что математики делать будут?
Это примерно как с экстраполяцией женихов из xkcd.
Во-первых, не все виды неопределённого поведения диагностируются компилятором. Garbage In - garbage out.
Во-вторых, некоторые очевидные случаи диагностируются, и компилятор пишет по этому поводу варнинги. Просто эскалируйте варнинги до ошибок, и будет щасте.
В-третьих, некоторые очевидные случаи компилятор трактует, как заведомо невозможные, решая задачу покрытия кода. Не компилировать вообще он не имеет права (синтаксически-то программа well-formed), но может нафигачить туда произвольный мусор. В частности, может нафигачить туда ловушек. Просто соберите проект с санитайзерами (конкретно, с ubsan), и тогда эти очевидные случаи будут взрываться немедленно и предсказуемо, а не творить дичь.
В-четвёртых, на некоторую дичь у человека и у компилятора (точнее, у человеков: прикладного разработчика, разработчика компилятора и авторов стандарта) могут оказаться разные взгляды. И тут кто кого переспорит.
Самые яркие примеры последнего
this == nullptr. По стандарту невозможно, но активно эксплуатируется некоторыми легаси-библиотеками (MFC и ATL/WTL, например). Поэтому MSVC никогда не будет оптимизировать это место, а вот clang на определённых режимах сделает с большим удовольствием.
Арифметика и контроль переполнений (как через INT_MAX, так и за границы массивов) - традиционное для всех компиляторов (начиная с фортрана) место для жесточайших оптимизаций: упрощение формул, раскрутка циклов, вот это всё. И только пользователь может разъяснить: "да, в этом месте я никогда не вызову функцию, вылезающую за диапазон", или "ой я здесь имел в виду арифметику в кольце остатков", или "да не разыменовываю я! мне просто удобнее взять указатели далеко за границу вместо переводов в индексы и обратно"
union и всякие поздние инициализации. Специально для пуристов в стандарт затащили функцию "прачечная" std::launder, там чёрт ногу сломит в правилах времени жизни. Вот только весь легаси код, написанный до 2017 года, про эту прачечную не знает. Заставить переписывать?
в русской локали и русской кодировке - "ложь" и "правда" /// "true" и "false"
давным-давно на RSDN была пьеса "дева и мужлан" с Пабликом Морозовым во всех ролях, так вот эта дева оказалась очень даже гетерой
https://rsdn.org/forum/cpp/669214.1
Шевчук был ньюфагом, когда в 1980 году основал группу по мотивам скандала двадцатилетней давности. Вот тогдашние химики, слушая рокеров, думали: "господи, при чём тут эти древние инсектициды, какие же мы старпёры".
Заберите ваш возврат обратно. Это вы пытаетесь всё время сделать подмену. Неуспешно пытаетесь.
Вы выдвинули критерий про езду на собственном автопроме? Выдвинули. Я вам показал пример. Вы пытаетесь парировать это вопросами розничной цены. Ещё что-нибудь придумаете. Лишь бы не признать, что облажались в самом начале разговора.
Сами себя и оскорбляете. Признались бы, что облажались, и дело с концом.
С критериями успешности демократии вы тоже облажались, кстати.
А это здесь при чём? Первые лица Советского Союза могли хоть на служебных машинах кататься, хоть - если им совесть и наглость позволяла - в личное владение приобрести. И чайки и зимы, кстати, как-то покупались. Да, по мутным схемам, но тем не менее. А уж волгу - машину начальников среднего звена - купить, хоть официально за 10000р, хоть у перекупов за двойную цену - вообще как нефиг делать.
И государство финансировало развитие премиального автопрома, и само плодами этого развития пользовалось. Что не так-то?
Вы выдвинули критерий про первых лиц, я вам по этому критерию нашёл такую страну. Если вам ваш собственный критерий не нравится, - идите и предъявляйте претензии самому себе, что не умеете формулировать мысли до того, как лезете в дискуссию.
Поехали отмазки. Молдавия слишком молодая, спорные территории, проклятые оккупанты.
Грецию кто оккупировал? Сколько лет прошло со времени диктатуры чёрных полковников? А Испании, видимо, лично Франко подсуропил?
Но при этом Германии и Японии ни нацистское прошлое не помешало развить экономику, ни современная оккупационная армия США? Кстати, Япония тоже вон считает, что часть территории оккупирована вовсе не американцами.
А про "кандидат в Евросоюз" - этой морковкой, например, Турцию десятилетиями кормят, так что нечего хвастаться. Это не ачивка, а какой-то позор.
В общем, завязывайте, вы не умеете в агитацию и пропаганду, ваши объяснения несостоятельны от слова вообще.
Нуу началось, сова трещит и глобус гнётся. Давайте примеры поближе.
Демократическая Молдавия. Или там Майя Санду - гибридный диктатор?
Страны PIGS, неспроста так названные и выделенные в особый список прямо внутри Евросоюза. У греков гибридная диктатура? У испанцев король правит миром, не привлекая внимания санитаров? Тогда почему Британию и Нидерланды туда не включили?
Вот не надо тащить в кучу политический и экономический строй. Демократические страны включают в себя и лидеров, и откровенных лузеров. Берём любую африканскую или латиноамериканскую страну, и что, сильно им помогла демократия?
А уж "например" - вообще входит в клинч с вашим же первым абзацем. Первые лица Советского Союза ездили на зилах и чайках. И какой из этого следует вывод делать, по-вашему?
Если бы он сравнивал с допуском, то он сломал бы std::set прямо с гарантией. Неточное сравнение не удовлетворяет аксиоматике отношения порядка.
В группе, если мы называем операцию умножением, то и умножение, и обратное к нему деление, даёт элемент в том же множестве. Просто потому, что это группа.
Рациональные / алгебраические / вещественные / комплексные "разы", если выколоть 0, образуют группу.
Целые "разы", естественно, образуют лишь полугруппу, деление там определено частично.
Природоведение в первом-втором классе проходят! Шишечки, жёлуди там всякие вообще на уроках труда. К восьмому классу дети уже подготовлены о том, что у цветочков и белочек всё то же самое.
Безразмерные величины тем и хороши, что их произведение по-прежнему безразмерное.
Умножить на N раз, на ещё M раз - даст эх на MN-ого раз.
Операторы масштаба-и-поворота - это такое обобщение "раз" в векторном пространстве. Естественно, что они живут в своей собственной группе по умножению, а в группе размерность не может возрастать, произведение элементов - элемент того же множества.
Но если комплексное число представляет какую-нибудь размерную величину, то умножать такие величины можно с умножением размерностей.
Самое простое: комплексные ток, напряжение, сопротивление и мощность. Умножайте сколько угодно. Хотя можете помыслить об этих величинах как о размерной амплитуде и безразмерной нормированной комплексной фазе.
А чем сканированные документы в виде кучи картинок в pdf радикально лучше того же самого в ворде? Кроме ощущения, что отправитель рукожопый чайник?
У авторов конкретного документа могут быть специфические вкусы. Например, выберут вырвиглазный шрифт (учёные это иногда любят), или сверстают буклет, чтобы в коробке с товаром красивенько смотрелось.
Или понапихают this page is intentionally left blank. Сиди, скролли.
Даже на компе читать неприятно, а на телефоне - тем паче.
Если вы хаотично и бездумно смешиваете знаковые и беззнаковые, разной точности и разрядности, - то вам это auto или отказ от него - вообще не помеха для того, чтобы накосячить.
Ну вот написали
auto i = arr.size()-2, а если бы написали тамsize_t i = arr.size()-2, вам что, стало бы легче?Или если бы вы сделали проверку вида
if (arr.size()-2 < 0)вместо якобы эквивалентнойif (arr.size() < 2)?Говнокодить - так уж говнокодить до конца.
А long long - это вообще что было? Правильный тип в данном случае - это ptrdiff_t. Который может быть, а может и не быть long long.
Опять же, если вы серьёзно следите за погрешностями в плавающей арифметике, то уж как-нибудь соблюдёте чистоту рук, и у вас в каждом конкретном месте auto будет резолвиться в тот тип, который вы ждёте и который вам очевиден. Например, вы договорились везде использовать float, чисто для детерминизма, чтобы программа грешила одним и тем же способом. (И всё равно она будет варьировать - если от оптимизации зависит порядок вычислений, а вы это пустили на самотёк).
А чтобы вы меньше лажали, форсируйте варнинги компилятора до ерроров.
Умножение сторон прямоугольника даёт площадь прямоугольника - объект другого вида, нежели прямая. Как потом прямоугольник отображать на числовую ось?
Это тоже сложные ответы.
А площади со знаком - https://habr.com/ru/articles/754090/comments/#comment_25862408
В метрических градусах прямой угол гораздо прямее!
Сверхтекучий жидкий гелий состоит из смеси двух фаз - истинно сверхтекучего гелия и просто жидкого.
Это как смесь воды со снегом.
Когда весь истинно сверхтекучий утечёт и останется только жидкий, что математики делать будут?
Это примерно как с экстраполяцией женихов из xkcd.
и делаете из него каперсы, манго и маракуйю, идентичные натуральным!