Здравствуйте, so5team, Вы писали:
S>Здравствуйте, Kluev, Вы писали:
K>>"Всегда будет" — это громкие, но пустые заявления. Вот к примеру простой жизненный пример: итерация пар соседних элементов в массиве для вычисления длинны полилинии
K>>K>> double len = 0;
K>> for (int i = 0; i < points.size() - 1; i++)
K>> len += distance(point[i], point[i + 1]);
K>> return len;
K>>
K>>Один универсальный цикл на все случаи жизни. Никакие дополнительные ветки не нужны. В std::С++ такое естественно работать не будет, std-программист либо наступит на грабли, либо будет вынужден погрузиться в микро-менеджмент и "перебрасывать слагаемые"
S>А теперь представим, что в процессе сопровождения и оптимизации у вас points из вектора превратился в простой список или список чанков. И у вас больше нет индекса, зато есть итераторы, которые позволяют вам итерироваться по новому контейнеру последовательно.
А давайте представим, что земля завтра налетит на небесную ось?
У классов на основе списков и на основе массивов разные сценарии использования, и если требуется то такие в программе живут параллельно, а не переделываются из одного в другой.
S>Ведь ваш цикл останется именно таким на все случаи жизни, не правда ли?
S>Ну или давайте посмотрим на знаковые индексы/размерности с другой стороны. Насколько они удобны не для последовательных итераций, а для произвольного доступа. Вот у нас есть вектор v размера N и мы по сложной формуле вычисляем позицию i в этом векторе. А перед обращением к v(i) нам нужно убедится, что i валидный. Что нам потребуется?
S>Потребуется написать два условия в проверке:
S>S>if(i >= 0 && i < N)
S>
S>вместо всего одной для случая беззнаковых размеров и индексов.
Это вам потребуется. А мне потребуется написать
if (vec.valid_index(i))
Я использую свои классы с рациональным набором операций
S>Так вот, поскольку вы наверняка не поймете к чему я привожу эти примеры,
Если вы себя официально позиционируете умнее своего собеседника, то вам надо видеть хотя-бы дальше своего носа. Но в вашем наивном примере, в якобы эффективном переходе от двух сравнений в if(i >= 0 && i < N) к одному в беззнак.арифметике, вы не видите леса за своим носом. Если вы "вычисляете" индекс в беззнаковой арифметике, то чтобы избежать переполнения ваши проверки просто переедут из кода обращения к массиву, в код вычисления индекса. Причем их число будет пропорционально размеру кода. В знаковой арифметике вы откупаетесь
одним простым и эффективным if(i >= 0 && i < N)
S> мораль сей басни такова: ваш "малолетний дебилизм" состоит в том, что вы признаете единственно правильной только свою точку зрения. И в упор отказываетесь принимать тот факт, что ни у знаковых размерностей, ни у беззнаковых нет абсолютных преимуществ во всех сценариях использования. А раз так, то какой бы выбор не был сделан, всегда будут сценарии, когда сделанный выбор ведет либо к проблемам, либо к дополнительным накладным расходам.
Вы так говорите как будто каждый раз в коде делаете осознанный выбор в пользу знак. или беззнак. индексов. На самом деле кушаете то, что подают в стл. Мой осознанный выбор знаковая арифметика. Согласитесь что в такой ситуации ваши нравоучения и напыщенное сектанство не уместны. Вы — человек действующий шаблонно по указивке комитета, пытаетесь поучать человека действующего осознанно. Это просто смешно.
S>Понимай вы это, вы бы не позволили себе высказывания в стиле юношеского максимализма, вроде: "Человек который имеет другую точку зрения, конечно имеет на нее полное право, но по сути является садомазохистом и не подходит для принятия общественно значимых решений по моральным качествам." Именно такой юношеский максимализм в ваших высказываниях и позволяет классифицировать вас как "малолетнего дебила".
А вас как великовозрастного.