Кому тут лопату выдать?))
вы б хоть на дату последнего сообщение смотрели (знаю, что спамера тут удалили)
MrShoor
> for(size_t i = vector.size(); --i >=0;)
for(size_t i = vector.size( ), N = vector.size( ); --i < N;)
не благодари.
Вот из-за таких пробелов, удлиняющих строку чуть ли не вдвое, размер кода принято считать в количестве строк, а не в их общем весе.
Слабо байтолюбите:
for(size_t i = vector.size( ); --i != size_t( -1); do_shit( vector[i]));
for(size_t i = vector.size(); i > 0; --i) do_shit(vector[i - 1]));
for(auto i = vector.size( ); i--; do_shit( vector[i]));
и еще из "наркомании":
for(auto i = vector.size( ); i--; [&]( int i) {std::cout << vector[i] << std::endl;}( i));
которую можно сократить до:
for(auto i = vector.size( ); i--; std::cout << vector[i] << ( ( i) ? ",":"\n"));
но так не интересно :)
Aroch
ты уверен, что твоем коде с пост инкрементом нет UB?
thevlad
> ты уверен, что твоем коде с пост инкрементом нет UB?
уверен, хотя бы потому что в моем коде нет инкремента, а декремент но это не принципиально, но еще и потому что size() возвращает беззнаковый тип для которых overflow чётко определен. Да и перехода с 0 на max_value_of_size_t компилятор даже делать не будет, так как цикл остановится на 0 и значение i уже не будет иметь значения.
Aroch
Да, ты прав, там в каждом выражении будет sequence point.
thevlad
> Нет, а sequence point где в этой строчке? Декремент может выполнится как до,
> так и после "vector [ i ]"
откуда ты такое придумал? for(a;b;c); a,b,c отдельные выражения которые имеют строгую последовательность.
Aroch
> .
этот то понятно, а вот в if (i-- > 0) где будет sequence point?
https://stackoverflow.com/questions/38770560/order-of-evaluation-… ison-operator
судя по всему, она будет после выражения i-- > 0
соответсвенно возможно два варианта:
i -= 1
if (i > 0)
и
if (i > 0)
i -= 1
thevlad
> соответсвенно возможно два варианта:
постфикс будет выполнен после сравнения. Но если ты боишься, то можешь писать
0 < --i + 1
по смыслу тоже самое. Только зачем ты мне этот вопрос задаешь? Я нигде не писал
i-- > 0
Laynos
> либо чересчур сложную, неоправданную систему проектирую
Такое есть в CAD-системах.
Aroch
> по смыслу тоже самое. Только зачем ты мне этот вопрос задаешь? Я нигде не писал
Ты писал "i--" что эквивалентно "i-- != 0". Там нечего бояться но, если sequence point после выражения внутри if, то сайд эффекты от пост декремента могу произойти в любой момент времени до нее. То есть очевидное UB.
thevlad
> если sequence point после выражения внутри if, то сайд эффекты от пост декремента могу произойти в любой момент времени до
> нее.
ну не используй пост операции в таких случаях, к чему вообще весь этот разговор, или ты предлагаешь вообще пост операции не использовать?
Тема в архиве.