LINUX.ORG.RU

Это что за жесть?

 


0

1

В чём разница между ++i и i++?

Ограничение на отправку комментариев: только для модераторов

Что за модераторский беспредел? Т.е. если пост оскорбил чувство прекрасного какого-нибудь модератора, то он может творить всё, что захочет?

Я же задал обычный вопрос, и меня он действительно интересует. Почему закрыли постинг?

Ответ на этот вопрос настолько разжеван и попахивает троллингом, что тема скорее всего превратится в тупой срач. Тем более, в первом посте уже ответили.

Zhbert ★★★★★
()

@romanlinux

Короч по идее ++i работает чуть быстрее чем i++, хотя эти обе операции и являются атомарными.

С каких это пор ++i и i++ являются атомарными?

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

Киньте в Talks тогда эту тему, он ведь для того и существует.

Я бы так и сделал, да. Не я закрывал.

Zhbert ★★★★★
()

Ограничение на отправку комментариев: только для модераторов

Потому что только они в этом деле шарят )

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

Про скорость это довольно давно известный кейс. Старые компиляторы генерировали больше инструкций для i++, чем для ++i, поэтому форма написания ++i в каком-нибудь for (int i = 0; i < 1000; ++i) действительно была оправдана, так как была быстрее.

Сиё было очень-очень давно, современные компиляторы не имеют подобных проблем.

Вот только привычки людей не изменить, поэтому программиста-деда «старой школы» всегда видно по ++i в его циклах.

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

Для атомарности вместо i++ надо использовать какой-нибудь __atomic_fetch_add(&i, 1, __ATOMIC_SEQ_CST).

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

Сиё было очень-очень давно, современные компиляторы не имеют подобных проблем.

Ну вот и я думаю, что о таком слышал году в 2005 где-то, наверное. Поэтому и интересно, чем он мерял скорость =)

Zhbert ★★★★★
()

Я же задал обычный вопрос

Нет.

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

Для атомарных типов — со времён их появления.

В каких языках вместе с атомарными типами используются постфиксные и префиксные декременты/инкременты?

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

C11 6.5.3.1 Prefix increment and decrement operators

1 The operand of the prefix increment or decrement operator shall have atomic … type …

2 … The expression ++E is equivalent to (E+=1)

6.5.16.2 Compound assignment

3 A compound assignment of the form E1 op = E2 is equivalent to the simple assignment expression E1 = E1 op (E2), except that the lvalue E1 is evaluated only once, and with respect to an indeterminately-sequenced function call, the operation of a compound assignment is a single evaluation. If E1 has an atomic type, compound assignment is a read-modify-write operation with memory_order_seq_cst memory order semantics.

Ты не осилил это найти сам?

utf8nowhere ★★★
()

и в нормальных языках разницы между ++i и i++ нет

В нормальных языках нет ++i и i++.

Есть i += 1.

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

++i на атомарном типе вместо какого-нибудь g_atomic_int_add()

Так можно писать, но будет выдавать предупреждения, и возможно делает не совсем то, что нужно, так как неявно выбирается модель memory_order_seq_cst:

https://gcc.godbolt.org/z/Mv91qYdh6

https://en.cppreference.com/w/c/atomic/memory_order

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

++i на атомарном типе вместо какого-нибудь g_atomic_int_add()

Так можно писать, но будет выдавать предупреждения

Ты всегда с -Weverything компилируешь? 🤡🤡🤡

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

Ты всегда с -Weverything компилируешь?

Свои да. А так нет, так как многие проекты писались без этого и сейчас там будут миллиарды предупреждений. А в чём проблема? Ты компилируешь с -w ?

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

А так нет, так как многие проекты писались без этого и сейчас там будут миллиарды предупреждений.

Вангую, чуть менее чем полностью бесполезных.

А в чём проблема?

Нинужно. К тому же, есть только у clang.

Ты компилируешь с -w ?

-Wall -Wextra хватит всем.

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

Кстати «Ответ разжёван» != «Проблема решена». Я в спецразделе несколько раз попадал в темы, в которых понимание ещё не было достигнуто, а тему уже быстро закрыли для комментирования. При том, что я в этих случаях был готов предложить какие-то компромиссные формулировки.

Может, не ограничивать комментирование хотя бы в течении трёх суток, например? Дать людям возможность высказаться.

P.S. Но в данном случае, как я понимаю, речь немного про другое. Тема не из спецраздела, и её в итоге, смотрю, таки разблокировали. Правда, перемещение в Talks вызывает сильное сомнение. Можно, наверное, и в Development анонимное комментирование закрыть было?..

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

Это в книжке по практическому программированию на сях 97 года написано в контексте плюсов

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

Вот только привычки людей не изменить, поэтому программиста-деда «старой школы» всегда видно по ++i в его циклах.

Давайте вспомним про итераторы (которые могут использоваться для структур хитрее, чем массив или список) и соответствующие перегрузки ++. Это значит, что размер условного i может быть разным, его поведение при копировании (которое требуется для i++) - тоже разным. Что делает актуальным заботу о разнице быстродействия (или даже корректности применения) ++i и i++ . Кейзы, конечно, разные, но, по-моему, писать i++ в C++ - моветон и поныне.

Атомарность тут ваще побоку и не важна в контексте.

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

g_atomic_int_add()

Зачем на пустом месте создавать зависимость от glib? Есть встроенные функции компилятора, они те же самые в GCC и Clang.

X512 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.