Здравствуйте, T4r4sB, Вы писали:
TB>>>Ты на беззнаках даже тупо от ЭН до нуля проитерироваться не можешь без дополнительного бубна.
R>>А в чем проблема?
TB>i--, заменяющее сразу два блока из заголовка for?
И? Где тут "дополнительный бубен" и "ты не можешь"?
TB>Мы вам перезвоним, ога.
Здравствуйте, rg45, Вы писали:
TB>>i--, заменяющее сразу два блока из заголовка for?
R>И? Где тут "дополнительный бубен" и "ты не можешь"?
Подобные извращения, которые заставляют код выглядеть противоестественно — это и есть дополнительный бубен, если что. Возможность записать обратный цикл хоть как-то тут никто не отрицает, мы отрицаем именно возможность записать его "нормально".
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Здравствуйте, T4r4sB, Вы писали:
TB>>>i--, заменяющее сразу два блока из заголовка for?
R>>И? Где тут "дополнительный бубен" и "ты не можешь"?
TB>Подобные извращения, которые заставляют код выглядеть противоестественно — это и есть дополнительный бубен, если что. Возможность записать обратный цикл хоть как-то тут никто не отрицает, мы отрицаем именно возможность записать его "нормально".
Вот так вот незаметно перешли от "ты не можешь" к категореиям "нормально" и "противоестественно". Ну и что противоестественного в замене двух выражений одним? Почему это бубен и почему он *дополнительный*? И кто нынче решает, что "нормально" и что "естественно"? Есть какие-нибудь критерии, кроме твоих представлений о добре и зле?
Здравствуйте, T4r4sB, Вы писали:
R>>Вот так вот незаметно перешли от "ты не можешь" к категореиям "нормально" и "противоестественно". TB>Никуда не переходили, ты не смог записать обратный беззнаковый цикл без бубна.
Определение бубна в студию.
R>>Ну и что противоестественного в замене двух выражений одним? TB>i-- в качестве второго выражения заголовка for?
А почему нет-то? Там куда более интересные варианты допустимы, вообще-то:
condition - either
- an expression which is contextually convertible to bool. This expression is evaluated before each iteration, and if it yields false, the loop is exited.
- a declaration of a single variable with a brace-or-equals initializer. the initializer is evaluated before each iteration, and if the value of the declared variable converts to false, the loop is exited.
TB>Ты так пишешь в продакшоне? Мы вам перезвоним.
Ну эти причитания я уже слышал. Это все твои аргументы?
Здравствуйте, rg45, Вы писали:
R>Определение бубна в студию.
Мы вам перезвоним.
R>А почему нет-то? Там куда более интересные варианты допустимы, вообще-то:
Ты думаешь, я синтаксис for не знаю?
Тебе не приходило в голову, что от хорошего кода требуется что-то ещё кроме синтаксической корректности?
R>Ну эти причитания я уже слышал. Это все твои аргументы?
А тебе этого мало?
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте
Здравствуйте, rg45, Вы писали:
TB>>i--, заменяющее сразу два блока из заголовка for?
R>И? Где тут "дополнительный бубен" и "ты не можешь"?
Тут, я полагаю, вопрос привычки.
Кто-то, например, очень не любит двойное отрицание, т.к. поведение неочевидное и нужно вдумываться, что делает этот код.
Чтобы отличить --i от i-- в данном контексте тоже нужно напрягаться.
Поэтому если можно написать проще, то предпочитают писать проще.
В твоём примере, например, с использованием переполнения.
_____________________
С уважением,
Stanislav V. Zudin
Здравствуйте, T4r4sB, Вы писали:
TB>Мы вам перезвоним.
Ваш звонок очень важен для нас.
TB>Ты думаешь, я синтаксис for не знаю?
Только об этом и думаю.
TB>Тебе не приходило в голову, что от хорошего кода требуется что-то ещё кроме синтаксической корректности?
Мне приходило в голову, что утверждения желательно чем-то подкреплять.
R>>Ну эти причитания я уже слышал. Это все твои аргументы? TB>А тебе этого мало?
Чего "этого" — стонов? Для того, чтобы вызвать сочувствие, может, и достаточно. Для остального маловато будет.
SVZ>К ранеесказанному добавлю ещё один кейс. SVZ>Индекс в массиве это полноценная сущность БД. Используется вместо указателей. SVZ>В этом случае отрицательные значения используются для обозначения невалидных объектов (у нас это -1) и для каких-нибудь специальных констант.
Если вынести за скобки вопросы стиля и дизайна, то операция индексирования применима не только к массивам, но и указателям. Ведь, согласно стандарту, операция индексирования — это просто комбинация опраций сложения указателя и числа с последующим разыменованием. *(p + i), *(i + p), p[i], i[p] — все это равнозначные выражения и индекс вполне может быть отрицательным.
Здравствуйте, T4r4sB, Вы писали:
TB>Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>>Забыл добавить "...в нашей команде...".
TB>В какой нормальной команде допустимы такие заголовки for?
Смотрим код, и понимаем, что это просто нытье по поводу стиля, которое, в масштабе — ровным счетом ни на что не влияет. Если это ситуационно нужно — пожалуйста.
Тем более эта конструкция вообще сложности как таковой не имеет. while (i--) это сложно? Или пара SUB/JNC?
Здравствуйте, T4r4sB, Вы писали:
SVZ>>Забыл добавить "...в нашей команде...".
TB>В какой нормальной команде допустимы такие заголовки for?
В любой, где даже рядовой дев способен отличить поведение --i от i--.
У нас, например, разрешено всё, что поддерживается в С++17.
В одной компании не использовали упомянутое выше двойное отрицание, ибо было непонятно — то ли это очепятка, то ли так и задумано, без комментариев не всегда очевидно.
У вас такой code-standard откуда сформировался? Просто скопировали чей-то?
Или запретили отдельные конструкции, ибо создавали много багов?
_____________________
С уважением,
Stanislav V. Zudin
Здравствуйте, T4r4sB, Вы писали:
SVZ>>Забыл добавить "...в нашей команде...".
TB>В какой нормальной команде допустимы такие заголовки for?
А ты уверен, что в вашей команде это не прошло бы через ревью? Такое впечатление, что зашугали тебя там так, что у тебя вполне нормальные конструкции вызывают суеверный ужасъ
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>В любой, где даже рядовой дев способен отличить поведение --i от i--. SVZ>У нас, например, разрешено всё, что поддерживается в С++17.
Здравствуйте, rg45, Вы писали:
R>А ты уверен, что в вашей команде это не прошло бы через ревью? Такое впечатление, что зашугали тебя там так, что у тебя вполне нормальные конструкции вызывают суеверный ужасъ
Да, я уверен, что цикл с кулхацкерским заголовком (а такое использование for, в котором используются побочные эффекты условия выхода, можно назвать только кулхацкерским) бы не прошёл у нас ревью.
Нет такой подлости и мерзости, на которую бы не пошёл gcc ради бессмысленных 5% скорости в никому не нужном синтетическом тесте