- 1
++ ++i;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+5
++ ++i;
bormand 23.04.2016 22:34 # +4
inkanus-gray 23.04.2016 22:59 # +6
http://ideone.com/Dz4HTS
kegdan 23.04.2016 23:13 # +5
1024-- 24.04.2016 04:44 # +3
bormand 24.04.2016 10:52 # +2
Например:
+ и - декремент/инкремент ячейки
++ и -- декремент/инкремент указателя
& и * ввод и вывод
~ и ! образуют цикл
Жалко, что пробелы придётся писать и квадратные скобочки уже не заюзать...
1024-- 24.04.2016 11:07 # 0
kegdan 24.04.2016 11:57 # +3
https://ideone.com/sGPtvn
1024-- 24.04.2016 12:53 # +3
kegdan 24.04.2016 13:28 # 0
inkanus-gray 24.04.2016 13:30 # +4
kegdan 24.04.2016 13:33 # 0
bormand 24.04.2016 13:36 # +3
Не приоритет, а ленивость. Штатный оператор не считает правый операнд, если левого достаточно для ответа. А у перегруженного всегда вычисляются оба и только потом оператор получает управление.
kegdan 24.04.2016 13:37 # 0
inkanus-gray 24.04.2016 14:00 # +4
kegdan 24.04.2016 14:01 # 0
1024-- 24.04.2016 14:11 # +10
Antervis 25.04.2016 07:44 # +2
kegdan 25.04.2016 07:48 # +2
Xom94ok 25.04.2016 09:52 # +8
Antervis 25.04.2016 09:57 # 0
Указатель не разыменовывается, потому что && не будет считать второй аргумент если первый false
kegdan 25.04.2016 11:01 # 0
Antervis 25.04.2016 15:15 # +1
Soul_re@ver 24.04.2016 20:36 # 0
И я где-то видел предложение, если корутины добавят, в лучших традициях многозначности ключевых слов юзать await в перегрузках операторов для ленивого вычисления операндов.
Antervis 25.04.2016 07:45 # +2
TarasB 25.04.2016 10:52 # +3
Antervis 25.04.2016 15:14 # 0
TarasB 25.04.2016 16:39 # +3
inkanus-gray 25.04.2016 17:47 # +6
3.14159265 24.04.2016 21:03 # +4
ffffffuuuu~
Я всегда знал что перегрузка (синтаксический сахар над вызовами методов) опасна.
Годный камень в огород крестоблядей.
Soul_re@ver 25.04.2016 13:35 # +2
А камни кидать погоди, пока точку не разрешат перегружать. Вот тогда можно оторваться.
Antervis 25.04.2016 15:50 # 0
Soul_re@ver 25.04.2016 20:10 # 0
Кстати в С++ и method chaining не всегда рекомендуется использовать, так как можно нарваться на UB. Поэтому одно из достаточно популярных предложений — добавить точки следования в перегрузки некоторых операторов и между вызовами методов.
Antervis 26.04.2016 06:34 # 0
Где в method chaining может быть UB? Референс на вызывающий объект вернется только после выполнения функции
Soul_re@ver 26.04.2016 14:50 # +2
Не отработает как надо
Вот собственно бумага: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0145r1.pdf
kegdan 26.04.2016 20:54 # 0
находит все порно на жестком?
3.14159265 25.04.2016 19:26 # +4
"мы сделали новую модную фичу Х*"
* нехуй пользоваться фичей Х когда Венера с Луной в разных фазах. мы вас предупреждали
1024-- 25.04.2016 19:33 # 0
Яркие примеры - GC и риалтайм, неявные касты и нетривиальные выражения, рекурсия и переполнение, ленивость и императивный подход.
Выходит, надо редуцировать набор фич до тех пор, пока их и вовсе не станет. Что на эту тему говорит Ваш внутренний Дзенский?
3.14159265 25.04.2016 19:54 # +4
kegdan 25.04.2016 20:23 # +1
bormand 25.04.2016 20:26 # +4
Xom94ok 25.04.2016 21:52 # +3
kegdan 26.04.2016 01:02 # +1
3_14dar 26.04.2016 01:03 # 0
dxd 25.04.2016 22:10 # 0
Antervis 26.04.2016 06:37 # +2
"мы добавили новое модное расширение к языку*"
*но даже авторы не знают всех его подводных камней
bormand 24.04.2016 13:45 # +2
g: c++ user-defined literals
kegdan 24.04.2016 13:54 # 0
3.14159265 24.04.2016 21:06 # +1
> ++++++i;
Одно слово: кресты.
Пойди себя и прибей.
inkanus-gray 23.04.2016 22:54 # 0
bormand 23.04.2016 23:06 # +2
6.5.16/4: If an attempt is made to modify the result of an assignment operator or to access it after the next sequence point, the behavior is undefined.
Хе-хе.
3_dar 23.04.2016 23:25 # +3
Какая разница что первым выполнится, ++i, или ++i.
bormand 23.04.2016 23:33 # +3
З.Ы. Он же, вроде как, имеет право сначала взять значение i на вход всех инкрементов, потом сделать все инкременты, а потом сложить их результаты в i...
3_dar 23.04.2016 23:41 # 0
(a *= 7) %= 2;
bormand 23.04.2016 23:49 # +2
3_dar 23.04.2016 23:53 # 0
bormand 24.04.2016 00:01 # +2
kegdan 23.04.2016 23:40 # +1
(a+=1)+=1
и на втором присвоении сишка тебя нахуй пошлет потому что левая честь не пременная
а вообще должно развернуться в
(a = a + 1) = (a = a + 1) + 1
а тут уже UB
Борманд, моргни если я прав
bormand 23.04.2016 23:50 # +3
Да. А вот у крестов там почему-то lvalue решили сделать.
Имхо, лучший вариант в питоне - операторы присваивания не возвращают результатов.
inkanus-gray 23.04.2016 23:51 # 0
kegdan 23.04.2016 23:52 # +4
bormand 23.04.2016 23:59 # +1
Плюсы: require a modifiable lvalue as their left operand and return an lvalue with the type and value of the left operand after the assignment has taken place.
kegdan 24.04.2016 00:02 # +2
guesto 24.04.2016 00:06 # 0
bormand 24.04.2016 00:12 # 0
Хотя... after the assignment has taken place...
Хуй знает, короче. Я бы не стал рисковать.
kegdan 24.04.2016 00:19 # 0
++++1
эквивалентно
(a = a + 1) = (a = a + 1) + 1
а тут уже UB ибо может оказаться, что а увеличится на 3
bormand 24.04.2016 00:23 # 0
Antervis 25.04.2016 08:09 # 0
Antervis 25.04.2016 08:01 # 0