- 1
++ ++i;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+5
++ ++i;
http://ideone.com/Dz4HTS
Например:
+ и - декремент/инкремент ячейки
++ и -- декремент/инкремент указателя
& и * ввод и вывод
~ и ! образуют цикл
Жалко, что пробелы придётся писать и квадратные скобочки уже не заюзать...
https://ideone.com/sGPtvn
Не приоритет, а ленивость. Штатный оператор не считает правый операнд, если левого достаточно для ответа. А у перегруженного всегда вычисляются оба и только потом оператор получает управление.
Указатель не разыменовывается, потому что && не будет считать второй аргумент если первый false
И я где-то видел предложение, если корутины добавят, в лучших традициях многозначности ключевых слов юзать await в перегрузках операторов для ленивого вычисления операндов.
ffffffuuuu~
Я всегда знал что перегрузка (синтаксический сахар над вызовами методов) опасна.
Годный камень в огород крестоблядей.
А камни кидать погоди, пока точку не разрешат перегружать. Вот тогда можно оторваться.
Кстати в С++ и method chaining не всегда рекомендуется использовать, так как можно нарваться на UB. Поэтому одно из достаточно популярных предложений — добавить точки следования в перегрузки некоторых операторов и между вызовами методов.
Где в method chaining может быть UB? Референс на вызывающий объект вернется только после выполнения функции
Не отработает как надо
Вот собственно бумага: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0145r1.pdf
находит все порно на жестком?
"мы сделали новую модную фичу Х*"
* нехуй пользоваться фичей Х когда Венера с Луной в разных фазах. мы вас предупреждали
Яркие примеры - GC и риалтайм, неявные касты и нетривиальные выражения, рекурсия и переполнение, ленивость и императивный подход.
Выходит, надо редуцировать набор фич до тех пор, пока их и вовсе не станет. Что на эту тему говорит Ваш внутренний Дзенский?
"мы добавили новое модное расширение к языку*"
*но даже авторы не знают всех его подводных камней
g: c++ user-defined literals
> ++++++i;
Одно слово: кресты.
Пойди себя и прибей.
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.
Хе-хе.
Какая разница что первым выполнится, ++i, или ++i.
З.Ы. Он же, вроде как, имеет право сначала взять значение i на вход всех инкрементов, потом сделать все инкременты, а потом сложить их результаты в i...
(a *= 7) %= 2;
(a+=1)+=1
и на втором присвоении сишка тебя нахуй пошлет потому что левая честь не пременная
а вообще должно развернуться в
(a = a + 1) = (a = a + 1) + 1
а тут уже UB
Борманд, моргни если я прав
Да. А вот у крестов там почему-то lvalue решили сделать.
Имхо, лучший вариант в питоне - операторы присваивания не возвращают результатов.
Плюсы: 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.
Хотя... after the assignment has taken place...
Хуй знает, короче. Я бы не стал рисковать.
++++1
эквивалентно
(a = a + 1) = (a = a + 1) + 1
а тут уже UB ибо может оказаться, что а увеличится на 3