Size: a a a

2020 October 31

m

magras in pro.cxx
magras
Кажется разобрался. Префиксный инкремент определен через оператор присваивания, которое гарантирует что:
> the assignment is sequenced before the value computation of the assignment expression
Да, я как всегда туплю, это не упорядочивает сайд эффект инкремента и вычисление правой части присваивания.
источник

m

magras in pro.cxx
А мне ведь не мерещилось, что в constexpr контексте не допускается UB?
источник

VS

Vlad Serebrennikov in pro.cxx
magras
А мне ведь не мерещилось, что в constexpr контексте не допускается UB?
реализации отнюдь не идеальны
источник

VS

Vlad Serebrennikov in pro.cxx
gcc, кажется, наименее строгий в этом отношении
источник

АК

Артём Колпаков... in pro.cxx
@drMagras @Endill разве такое поведение не противоречит "The right operand is sequenced before the left operand" и определению sequenced before "An expression X is said to be sequenced before an expression Y if every value computation and every side effect associated with the expression X is sequenced before every value computation and every side effect associated with the expression Y"?
источник

CD

Constantine Drozdov in pro.cxx
Артём Колпаков
@drMagras @Endill разве такое поведение не противоречит "The right operand is sequenced before the left operand" и определению sequenced before "An expression X is said to be sequenced before an expression Y if every value computation and every side effect associated with the expression X is sequenced before every value computation and every side effect associated with the expression Y"?
Я не очень понимаю, как вообще работает "чтение данных" в правой части присваивания
источник

VS

Vlad Serebrennikov in pro.cxx
там, кстати, транк кланга 6 выдает
источник

CD

Constantine Drozdov in pro.cxx
это вообще как :)
источник

VS

Vlad Serebrennikov in pro.cxx
перемножил n до инкремента на n после, наверное
источник

m

magras in pro.cxx
Vlad Serebrennikov
там, кстати, транк кланга 6 выдает
А msvc может выдать оба результата в зависимости от уровня оптимизации.
источник

VS

Vlad Serebrennikov in pro.cxx
звучит как верный признак уб
источник

VS

Vlad Serebrennikov in pro.cxx
Артём Колпаков
@drMagras @Endill разве такое поведение не противоречит "The right operand is sequenced before the left operand" и определению sequenced before "An expression X is said to be sequenced before an expression Y if every value computation and every side effect associated with the expression X is sequenced before every value computation and every side effect associated with the expression Y"?
1) value computation of the right
2) value computation of the left
3) assignment
4) value computation of the assignment expression

порядок получается такой, где каждый пункт sequenced after предыдущего. то есть справа остается 2, а слева 3
источник

VS

Vlad Serebrennikov in pro.cxx
причем я так понимаю, что под assignment имеется в виду и перемножение с присваиванием для соответствующего оператора
источник

АК

Артём Колпаков... in pro.cxx
Vlad Serebrennikov
1) value computation of the right
2) value computation of the left
3) assignment
4) value computation of the assignment expression

порядок получается такой, где каждый пункт sequenced after предыдущего. то есть справа остается 2, а слева 3
Порядок то верный, но side effect от lhs (++) срабатывает до вычисления rhs, так как в примере там 3 (а итог 9), вот в чем вопрос
источник

VS

Vlad Serebrennikov in pro.cxx
Артём Колпаков
Порядок то верный, но side effect от lhs (++) срабатывает до вычисления rhs, так как в примере там 3 (а итог 9), вот в чем вопрос
я к тому, что так не должно быть, если я не ошибаюсь в толковании стандарта
источник

N2

N 2 in pro.cxx
как goto влияет на производительность? Прыжок чего-то стоит?
источник

I

Ivan in pro.cxx
N 2
как goto влияет на производительность? Прыжок чего-то стоит?
Смотря какой длины прыжок получается
источник

N2

N 2 in pro.cxx
А даже так, кароче мерить придется
источник

I

Ioann_V in pro.cxx
N 2
как goto влияет на производительность? Прыжок чего-то стоит?
Вроде как goto это безусловный переход, и в отличие от условного должен выполняться быстрее - потому что процессор когда его видит, ему не нужно ничего предиктить(угадывать как программа будет дальше себя вести) и прроцессор может спекулятивно продолжить свое выполнение, сделать гарантированно верный и нужный префетчинг из оперативы и т.п. Надо еще отметить, что длина прыжка тоже влияет, но вот на сколько сильно - не знаю.
источник

I

Ioann_V in pro.cxx
Но, условный переход в прогрмме if - может заменяться на такие инструкции как cmove, например, то есть JE, JZ и прочие условные переходы не генерируются. Начиная с процессоров skylake cmove не дорог - 1 такт в латенси, а вот до, кажется два такта.
источник