- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
class Program
{
static int x = 0;
static int f()
{
x = x + 10;
return 1;
}
public static void Main()
{
x += f();
System.Console.WriteLine(x);
}
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+121
class Program
{
static int x = 0;
static int f()
{
x = x + 10;
return 1;
}
public static void Main()
{
x += f();
System.Console.WriteLine(x);
}
}
Следите за руками! Чему же в итоге равно x?
Проверить себя: http://ideone.com/v8rktM
Источник: http://blogs.msdn.com/b/oldnewthing/archive/2014/08/14/10549885.aspx
Lure Of Chaos 15.08.2014 08:17 # 0
myaut 15.08.2014 08:42 # +2
>C++ evaluates the function first before capturing "X".
Or more exactly, a particular implementation of C++ on this particular source code on this particular day of the week happened to evaluate the function first.
someone 15.08.2014 08:48 # +5
bormand 15.08.2014 10:49 # +1
roman-kashitsyn 15.08.2014 11:02 # +6
TauSigma 15.08.2014 12:01 # 0
Полечить перестановкой:
kegdan 15.08.2014 13:24 # 0
roman-kashitsyn 15.08.2014 13:29 # +1
kegdan 15.08.2014 13:30 # 0
Математик не знает о побочных эффектах
он увидит, что складываются 2 целых числа
roman-kashitsyn 15.08.2014 13:32 # 0
правда что ли?
Расскажи это математикам, которые полвека пишут на фортране.
kegdan 15.08.2014 13:34 # +1
guest 15.08.2014 13:49 # +5
roman-kashitsyn 15.08.2014 14:05 # +5
Ах да, я забыл, нельзя относиться сразу к двум множествам.
Кегдан, сев за клавиатуру, внезапно перестал быть особью мужского пола.
kegdan 15.08.2014 14:08 # +3
eth0 15.08.2014 18:29 # 0
kegdan 15.08.2014 18:32 # 0
1024-- 15.08.2014 18:39 # 0
Способностью внушения джедаи обладают.
kegdan 15.08.2014 19:04 # +1
В доспехах, винтовка со мной
От жажды мозги не на месте
Песок, Татуин - вот отстой
Тут едет крутая тачила
Какой то дедок за рулем
Пердун улыбается мило
Два дройдека, парень при нем
Братюна давай чин о чину -
"Где дройдеков, старый, украл?
Зачем ты, седая скотина
Себе гея-мальчика снял?"
А дед лишь рукою колышит
И молвит - "ну что ты, сынок
Не этих ты дройдоков ищешь
И мне ни к чему новый срок"
Братюня от солнца поехал -
"Езжай, говорит, старый хрен"
Парнишка трясется от смеха
Менты, мол, тупые совсем
Я мне - больше всех что ли надо
Все это говно разгребать?
Пошло б оно нахер, ребята
С дибилом в дозоре стоять
Экспресс хуерга
1024-- 15.08.2014 19:13 # 0
kegdan 15.08.2014 19:15 # 0
eth0 15.08.2014 18:53 # +1
guest 15.08.2014 14:22 # 0
guest 15.08.2014 13:30 # 0
Причём тут это, поехавший?
Там нет хуйни в виде сайд-эффектов и мутабельных переменных.
kegdan 15.08.2014 13:33 # 0
guest 15.08.2014 13:57 # +1
1024-- 15.08.2014 13:58 # +4
Гость, вращайте барабан!
kegdan 15.08.2014 14:02 # +2
Передайте банку нам
1024-- 15.08.2014 13:54 # +4
> там нет такой хуйни как некоммутативное сложение целых чисел
Не знаю, не знаю. У математиков в хаскеле ещё некоммутативное умножение матриц и некоммутативное возведение в степень.
Как на таком языке пишут - не знаю...
kegdan 15.08.2014 13:59 # 0
Все просто, берешь алгем и читаешь;)
1024-- 15.08.2014 14:02 # 0
kegdan 15.08.2014 14:04 # 0
число - это число
а матрица из одного элемента это
data Matrix a = Matrix1 {getElement::a}| -- и так далее
1024-- 15.08.2014 14:13 # 0
Но число и в математике живёт так же, как и маленькая матрица. И сложение то же, и умножение.
kegdan 15.08.2014 14:16 # 0
guest 15.08.2014 13:38 # +5
А сколько слёз и боли вызывали сайд-эффекты инкрементов и присваиваний?
PS Кто порождает шаред-статик-переменные, и не защищает их лочкой или атомиком - должен страдать.
someone 15.08.2014 13:55 # +3
TarasB 15.08.2014 17:19 # +3
такую хрень в любом языке можно сделать, результат абсолютно непредскауем
gost 15.08.2014 18:37 # 0
roman-kashitsyn 16.08.2014 17:07 # 0
bormand 16.08.2014 17:58 # 0
bormand 16.08.2014 17:59 # 0
Если дробная часть a находится на равном расстоянии от двух целых чисел (четного и нечетного), возвращается четное число.
http://msdn.microsoft.com/ru-ru/library/wyk4d9cy%28v=vs.110%29.aspx
kegdan 16.08.2014 20:08 # +1
inkanus-gray 17.08.2014 02:03 # 0
HaskellGovno 16.08.2014 23:17 # 0
bormand 17.08.2014 06:26 # 0
kegdan 17.08.2014 09:49 # 0
bormand 17.08.2014 09:52 # +3
В среднем, в среднем.
Округление «до ближайшего чётного» исходит из предположения, что при большом числе округляемых значений, имеющих 0,5 в округляемом остатке, в среднем половина из них окажется слева, а половина — справа от ближайшего чётного, таким образом, ошибки округления взаимно погасятся. Строго говоря, предположение это верно лишь тогда, когда набор округляемых чисел обладает свойствами случайного ряда, что обычно верно в бухгалтерских приложениях, где речь идёт о ценах, суммах на счетах и так далее.
kegdan 17.08.2014 09:56 # 0
inkanus-gray 17.08.2014 17:19 # 0
bormand 17.08.2014 18:25 # 0
А следствия этого факта можно найти в других местах.
Хотя про то, что это banker's rounding масдаевцам стоило упомянуть.