- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
std::function<int()> gl()
{
int a=0;
return [=]()mutable{return a++;};
}
int main()
{
auto a=gl();
cout
<<a()
<<endl
<<a()
<<endl
<<a()
<<endl
<<a();
return 0;
}
LispGovno 17.10.2012 13:15 # 0
http://liveworkspace.org/code/441e8526a26e2b0cf8842ac4f2f92923
Результат конечно же неимоверно радует:
Думаю этот говнокод в одном из следующих бустов пофиксят.
LispGovno 17.10.2012 16:03 # 0
defecate-plusplus 17.10.2012 16:10 # +1
LispGovno 17.10.2012 17:46 # 0
defecate-plusplus 17.10.2012 17:53 # +2
10 лет жили без локальных функций, и еще бы столько же прожили
делаю скидку лишь на то, что это не продакшен код, а так, поиграться в свое удовольствие, т.е. премия не под ударом
absolut 17.10.2012 18:01 # +4
рейдеры в топике
eth0 17.10.2012 18:03 # +3
absolut 17.10.2012 18:19 # +5
defecate-plusplus 17.10.2012 18:25 # +8
3.14159265 17.10.2012 19:02 # +6
А за популяризацию языка Ада накинут.
bormand 17.10.2012 19:02 # +1
3.14159265 17.10.2012 19:05 # +1
http://www.google.ru/search?q=крестобляди
http://www.google.ru/search?q=кресто+блядство
Отставить панику.
bormand 17.10.2012 19:08 # +1
3.14159265 17.10.2012 19:16 # +1
По запросу крестоблядун ничего не найдено.
absolut 17.10.2012 22:03 # +3
3.14159265 17.10.2012 22:06 # 0
а я-то думал мой пост уже проиндексировало.
absolut 19.10.2012 09:44 # 0
уже:)
LispGovno 17.10.2012 18:34 # 0
Тут переменные по документации должны захватываться по значению. Поэтому они уже становиться не автоматическими и должны были выжить после выхода из функции.
Если хочется захватить переменную по ссылке, то делается так:
В таком случае она действительно умерла бы автоматически и ссылка оказалась бы в невалидном состоянии по выходу из функции.
LispGovno 17.10.2012 18:44 # 0
Локальные функции в С++03 написали как замену лямбд(безымянных функций). Оно конечно не так удобно, но хоть что-то.
LispGovno 17.10.2012 18:46 # 0
Зачем мне энергосберегающая лампочка? 10 лет жили со свечами, и еще бы столько же прожили.
LispGovno 17.10.2012 21:56 # +1
Будем надеятся, что не кинет исключение.
roman-kashitsyn 17.10.2012 14:29 # +2
roman-kashitsyn 17.10.2012 14:47 # +2
Потому что
LispGovno 17.10.2012 17:48 # −1
Кстати, гарантия порядка вычисления аргументов перегруженного оператора есть? Гарантии порядка вычисления аргументов функции вроде нет.
Abbath 17.10.2012 18:08 # +2
absolut 17.10.2012 14:50 # +1
> http://ideone.com/V33To
Зачем эти навороты со строками?
И магическую тройку убрать!
roman-kashitsyn 17.10.2012 14:56 # +2
LispGovno 17.10.2012 15:06 # 0
> http://ideone.com/V33To
Спасибо, что поправил мой продакшн-код.
absolut 17.10.2012 15:15 # +1
LispGovno 17.10.2012 15:09 # 0
Мой код проще. К тому же это не эквивалентный код. У меня создается локальный объект (потокобезопасно), а у вас глобальная переменная static int x = 0;
roman-kashitsyn 18.10.2012 23:58 # +3
LispGovno 19.10.2012 00:19 # 0
LispGovno 19.10.2012 00:28 # 0
Метапрограмммирование мощнее, чем в динамически типизированном языке - быть не может.
LispGovno 19.10.2012 00:25 # 0
А вот не правда: Рекурсия не возможна в паттернматчинге. В паттернматчинге не возможен даже такой вывод:
TClass<T&,T>::
А объяснение очень простое: Это не паттернматчинг, а алгоритм унификации.