<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title>Хабрахабр / Комментарии к посту «Лямбда выражения теперь и в С++» в блоге «C++»</title>
	<link>http://habrahabr.ru/rss/post/65798/</link>
	<description><![CDATA[Новые комментарии к посту «Лямбда выражения теперь и в С++» в блоге «C++»]]></description>
	<language>ru</language>
	<managingEditor>editor@habrahabr.ru</managingEditor>
	<generator>habrahabr.ru</generator>
	<pubDate>Sat, 11 Feb 2012 12:27:24 GMT</pubDate>
	<lastBuildDate></lastBuildDate>
	<image>
		<link>http://habrahabr.ru/</link>
		<url>http://habrahabr.ru/i/logo.gif</url>
		<title>Хабрахабр</title>
	</image>
	

	
	
	
	
	
		
	
		<item>
			<title>02.06.2010 08:56:46 Levsha100</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_2904683</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_2904683</link>
			<description><![CDATA[Скорее в лисп =)]]></description>
			<pubDate>Wed, 02 Jun 2010 08:56:46 GMT</pubDate>
			<author>Levsha100</author>
		</item>
	

	
		<item>
			<title>22.10.2009 03:07:15 freetonik</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_2097524</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_2097524</link>
			<description><![CDATA[Передача n в лямбду в качестве аргумента, если я правильно понял.]]></description>
			<pubDate>Thu, 22 Oct 2009 03:07:15 GMT</pubDate>
			<author>freetonik</author>
		</item>
	

	
		<item>
			<title>27.09.2009 18:08:57 Ronin</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_2023854</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_2023854</link>
			<description><![CDATA[Все гораздо проще, название «С++»:<br/>
«С» — как дань предшественнику и основе языка;<br/>
&quot;++&quot; — как указание на усовершенствование.<br/>
А оператор ++ был и в Си.]]></description>
			<pubDate>Sun, 27 Sep 2009 18:08:57 GMT</pubDate>
			<author>Ronin</author>
		</item>
	

	
		<item>
			<title>09.08.2009 18:09:15 vk2</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1875891</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1875891</link>
			<description><![CDATA[альтернативный вариант: <a href="http://habrahabr.ru/blogs/macosxdev/66632/">habrahabr.ru/blogs/macosxdev/66632/</a><br/>
<br/>
ps. Запутанность С++ только могила исправит. Простите :)]]></description>
			<pubDate>Sun, 09 Aug 2009 18:09:15 GMT</pubDate>
			<author>vk2</author>
		</item>
	

	
		<item>
			<title>02.08.2009 20:22:42 smilegs</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1853520</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1853520</link>
			<description><![CDATA[вот бы еще поддержку делегатов без извращений с шаблонами…]]></description>
			<pubDate>Sun, 02 Aug 2009 20:22:42 GMT</pubDate>
			<author>smilegs</author>
		</item>
	

	
		<item>
			<title>01.08.2009 17:07:31 michaelkl</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1851120</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1851120</link>
			<description><![CDATA[Этак скоро C++ превратится в Perl или что-то подобное…<br/>
:)))]]></description>
			<pubDate>Sat, 01 Aug 2009 17:07:31 GMT</pubDate>
			<author>michaelkl</author>
		</item>
	

	
		<item>
			<title>01.08.2009 08:59:26 Paul</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1849965</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1849965</link>
			<description><![CDATA[Впервые слышу о таком. В книге Кернигана и Ричи уже есть про ++ и --.]]></description>
			<pubDate>Sat, 01 Aug 2009 08:59:26 GMT</pubDate>
			<author>Paul</author>
		</item>
	

	
		<item>
			<title>01.08.2009 08:18:51 SSoft</title>
			<guid isPermaLink="true">#comment_1849902</guid>
			<link>#comment_1849902</link>
			<description><![CDATA[C++ проявился в 1985 году, на тот момент у Си не было оператора ++, его добавили позднее. Я не прав?]]></description>
			<pubDate>Sat, 01 Aug 2009 08:18:51 GMT</pubDate>
			<author>SSoft</author>
		</item>
	

	
		<item>
			<title>01.08.2009 02:57:30 redchrom</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1849534</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1849534</link>
			<description><![CDATA[Ты не понел, Си таким как был таким и остался, это Си++ мутирует. BTW си это тоже static scope язык, и сделать лексические замыкания не так сложно.]]></description>
			<pubDate>Sat, 01 Aug 2009 02:57:30 GMT</pubDate>
			<author>redchrom</author>
		</item>
	

	
		<item>
			<title>31.07.2009 20:19:24 amlet</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1849143</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1849143</link>
			<description><![CDATA[Кое что узнал новое из твоего коммента. А именно что можно спокойно инициализировать статическую переменную при объявлении внутри класса, если она констрантна. Быстренько накатал программульку, скомпилил, работает! Никогда в голову не приходило, хотя программлю на C++ уже не первый день. Как говорится: «Век живи — век учись». Спасибо.]]></description>
			<pubDate>Fri, 31 Jul 2009 20:19:24 GMT</pubDate>
			<author>amlet</author>
		</item>
	

	
		<item>
			<title>31.07.2009 18:04:00 Paul</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1848791</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1848791</link>
			<description><![CDATA[Человеку, поставившему минус: Просьба ознакомиться с пунктами 6.5.2 и 6.5.3 стандарта языка Си (ISO/IEC 9899:1990). Ну или проверить компилятором.]]></description>
			<pubDate>Fri, 31 Jul 2009 18:04:00 GMT</pubDate>
			<author>Paul</author>
		</item>
	

	
		<item>
			<title>31.07.2009 17:18:35 VoidEx</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1848698</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1848698</link>
			<description><![CDATA[В общем случае заинлайнить container.end() невозможно, так что надо на практических примерах смотреть или писать, как упомянули выше.]]></description>
			<pubDate>Fri, 31 Jul 2009 17:18:35 GMT</pubDate>
			<author>VoidEx</author>
		</item>
	

	
		<item>
			<title>31.07.2009 17:10:58 Paul</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1848676</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1848676</link>
			<description><![CDATA[static-член класса может быть проинициализирован при декларации только если он const и является интегральным типом либо перечислением. Хотя многие компиляторы позволяют это делать и в других случаях, это отклонение от стандарта.<br/>
<br/>
В случае 3 static функции и переменные не являются членами какого-то класса, static ограничивает область доступности этих переменных и функций текущей единицей трансляции.<br/>
<br/>
Потому что эти методы могут вызываться без создания экземпляра класса (к статическим членам-данным тоже можно обращаться без создания экземпляра), кроме того, они могут доступаться к любым статическим (в том числе и приватным) членам-данным класса.]]></description>
			<pubDate>Fri, 31 Jul 2009 17:10:58 GMT</pubDate>
			<author>Paul</author>
		</item>
	

	
		<item>
			<title>31.07.2009 16:56:44 Paul</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1848642</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1848642</link>
			<description><![CDATA[++ есть и в Си.]]></description>
			<pubDate>Fri, 31 Jul 2009 16:56:44 GMT</pubDate>
			<author>Paul</author>
		</item>
	

	
		<item>
			<title>31.07.2009 15:29:07 SSoft</title>
			<guid isPermaLink="true">#comment_1848386</guid>
			<link>#comment_1848386</link>
			<description><![CDATA[Нет.<br/>
++ из-за того, что в Си++ впервые появился такой оператор :), ну и потом ++ это инкремент, т.е. следующая версия. В Си++ появились классы, операторы new и delete. Насчет шаблонов не уверен… кажись они попозднее были.]]></description>
			<pubDate>Fri, 31 Jul 2009 15:29:07 GMT</pubDate>
			<author>SSoft</author>
		</item>
	

	
		<item>
			<title>31.07.2009 14:53:32 Nashev</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1848274</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1848274</link>
			<description><![CDATA[Я немножко не в курсе, поясните плиз: <br/>
* Инициализировать static-поле при декларации (случай 2 в Вашем списке) разве нельзя? Если можно — то он идентичен случаю 1<br/>
<br/>
* В случае 3 — слово static делает объявленя приватными? Замысловато, однако. А почему в стандарте для этого не предлагается слово типа private?<br/>
<br/>
* 4-ый случай — это как в Delphi объявление методов класса с помощью слова class? Интересно, почему тут оно объявляется словом static? Или они имеют ввиду, что метод — это типа ссылка на функцию, делают эту ссылку независимой от экземпляра, «статичной»?<br/>
<br/>
* В фразе «приватную или протектную ты объявить где угодно не сможешь» — тут Вы имели ввиду «вызвать» а не «объявить», или я что-то не понял?]]></description>
			<pubDate>Fri, 31 Jul 2009 14:53:32 GMT</pubDate>
			<author>Nashev</author>
		</item>
	

	
		<item>
			<title>31.07.2009 14:41:22 Nashev</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1848218</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1848218</link>
			<description><![CDATA[<a href="http://habrahabr.ru/blogs/cpp/65798/#comment_1846042">habrahabr.ru/blogs/cpp/65798/#comment_1846042</a>]]></description>
			<pubDate>Fri, 31 Jul 2009 14:41:22 GMT</pubDate>
			<author>Nashev</author>
		</item>
	

	
		<item>
			<title>31.07.2009 14:40:04 Nashev</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1848210</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1848210</link>
			<description><![CDATA[&quot;++&quot; в названии — это не столько объектно-ориентированность, сколько препроцессор, если я ничего не путаю.]]></description>
			<pubDate>Fri, 31 Jul 2009 14:40:04 GMT</pubDate>
			<author>Nashev</author>
		</item>
	

	
		<item>
			<title>31.07.2009 14:32:57 sse</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1848168</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1848168</link>
			<description><![CDATA[T4 — это ни черта не макросы lisp. t4 — просто текстовый шаблонизатор (в прямом смысле этого слова)/formatter/replacer, не более. Про семантику языка, AST и прочее он не знает.]]></description>
			<pubDate>Fri, 31 Jul 2009 14:32:57 GMT</pubDate>
			<author>sse</author>
		</item>
	

	
		<item>
			<title>31.07.2009 13:42:09 b0zz</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1847942</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1847942</link>
			<description><![CDATA[возможно, на истину в последней инстанции не претендую (относительно с++ и с# интерес сугубо созерцательный).]]></description>
			<pubDate>Fri, 31 Jul 2009 13:42:09 GMT</pubDate>
			<author>b0zz</author>
		</item>
	

	
		<item>
			<title>31.07.2009 12:36:09 xiWera</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1847646</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1847646</link>
			<description><![CDATA[вы путаете, t4 это для C#]]></description>
			<pubDate>Fri, 31 Jul 2009 12:36:09 GMT</pubDate>
			<author>xiWera</author>
		</item>
	

	
		<item>
			<title>31.07.2009 12:30:59 xiWera</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1847624</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1847624</link>
			<description><![CDATA[«никак не отражаются на лямбде» читать как «никак не отражаются на перменных вне оямбды»]]></description>
			<pubDate>Fri, 31 Jul 2009 12:30:59 GMT</pubDate>
			<author>xiWera</author>
		</item>
	

	
		<item>
			<title>31.07.2009 12:30:08 xiWera</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1847618</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1847618</link>
			<description><![CDATA[если по значению, то все что мы делаем с этими переменными внутри лямбды — никак не отражаются на лямбде<br/>
<br/>
если по ссылке, то отражается.<br/>
<br/>
Насчет замыканий. Было бы странно ожидать работоспособности такого кода:<br/>
<br/>
boost::function&lt;void()&gt; func;<br/>
<br/>
void f(){<br/>
int a = 3;<br/>
func = [&](){ a++; };<br/>
};<br/>
<br/>
f();<br/>
func();<br/>
<br/>
время жизни переменной a, по стандарту языка, кончилось по выходу из f(). Соответственно непонятно к какой перменной будет иметь доступ лямбда.<br/>
<br/>
P.S. что собственно и описано в пропозале:<br/>
<br/>
9… If one or more names in the effective capture set are preceded by &, the effect of invoking a closure object, or a copy, after the innermost block scope of the context of the lambda expression has been exited is undefined.<br/>
]]></description>
			<pubDate>Fri, 31 Jul 2009 12:30:08 GMT</pubDate>
			<author>xiWera</author>
		</item>
	

	
		<item>
			<title>31.07.2009 12:27:47 b0zz</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1847613</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1847613</link>
			<description><![CDATA[интересно наблюдать, как с каждым витком развития в с++ пытаются запилить всё больше реально удобных фич lisp'a (буквально наднях читал про «генератор кода», т.н. t4 — по сути: попытка повторить макросы cl)]]></description>
			<pubDate>Fri, 31 Jul 2009 12:27:47 GMT</pubDate>
			<author>b0zz</author>
		</item>
	

	
		<item>
			<title>31.07.2009 12:12:18 shamaniac</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1847561</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1847561</link>
			<description><![CDATA[Насколько я понимаю сущность замыканий, они хранят переменные которые видны в блоке где объявляется лямбда функция. Переменные объявленные в лямбда функции будут переинициализированны. А переменные которые объявлены в том же блоке что и лямбда функция будут храниться.<br/>
Может я не прав, но тогда не понятна зачем эта бодяга с хранением по значению или ссылке.]]></description>
			<pubDate>Fri, 31 Jul 2009 12:12:18 GMT</pubDate>
			<author>shamaniac</author>
		</item>
	

	
		<item>
			<title>31.07.2009 12:07:50 xiWera</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1847546</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1847546</link>
			<description><![CDATA[умный указатель это всё равно лишний оверхед, так что правильно что в стандарте можно указать рефересить или копировать.<br/>
<br/>
замыканий как таковых (как я понимаю из текущего стандарта) лямбда-функции не реализуют, так как все переменные объявленные внутри лямбда функции будут при каждом вызове переобъявляться и по выходу из лямбды удаляться из стека.<br/>
]]></description>
			<pubDate>Fri, 31 Jul 2009 12:07:50 GMT</pubDate>
			<author>xiWera</author>
		</item>
	

	
		<item>
			<title>31.07.2009 11:58:22 shamaniac</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1847513</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1847513</link>
			<description><![CDATA[Прошу прощения на самом деле я хотел написать<br/>
<br/>
tr1::function&lt;int(void)&gt; f() {....}<br/>
<br/>
Если вас волнует потеря памяти (я понимаю при работе с c++ это уже инстинкт =) то можно написать что-то вроде.<br/>
typedef tr1::function&lt;int(void)&gt; F;<br/>
pair&lt;F, F&gt; f() {<br/>
shared_ptrptr(new int(0));<br/>
return make_pair([=ptr](){ return (*ptr)++;}, [=ptr](){ return (*ptr)--;});<br/>
}<br/>
Понятно что такое решение ни полраза не потокобезопасно. Но с другой стороны мы получили пару функций связанных одной переменной без необходимости хранить эту переменную где-то еще. <br/>
<br/>
У нас наблюдается терменологическая путаница. Есть лямбда функции. Они в данном контексте не более чем функции без имени. Так сказать «syntactic sugar». Но часто вместе с лямбда функциями используются замыкания. Замыкания как я представляю нужны для того чтобы сохранить часть переменных для последующего использования внутри лямбда функции.<br/>
<br/>
Своим неудачным примером я хотел показать что вопрос о том как именно сохранять эти переменные не всегда очевидно для компилятора. Например понятно что можно сохранить перемнные со стека по значению. Но если программист знает что эти переменные очень тяжелые и что функция не будет использована за пределами данного блока видимости, то лучше хранить их по ссылке.<br/>
<br/>
например <br/>
void f(vector* v) {<br/>
hash_setbig_hash_set;<br/>
// fill big_hash_set<br/>
stable_partition(v-&gt;begin(), v-&gt;end(), [&big_hash_set](int i) { return big_hash_set.count(i); }<br/>
…<br/>
}<br/>
<br/>
Если бы мне пришлось разрабатывать замыкания в c++, то я бы, скорее всего, остановился на том, чтобы все хранить по значению. Те кого это не устраивает могли бы передавать все через указатели (умные и не очень). В таком случае мой пример выглядел бы как<br/>
<br/>
void f(vector* v) {<br/>
hash_setbig_hash_set;<br/>
// fill big_hash_set<br/>
hash_set* big_hash_set_ptr = &big_hash_set;<br/>
stable_partition(v-&gt;begin(), v-&gt;end(), (int i) { return big_hash_set_ptr-&gt;count(i); }<br/>
…<br/>
}<br/>
<br/>
С другой стороны та реализация которую предлагают в стандарт мне тоже нравится.]]></description>
			<pubDate>Fri, 31 Jul 2009 11:58:22 GMT</pubDate>
			<author>shamaniac</author>
		</item>
	

	
		<item>
			<title>31.07.2009 11:34:19 xiWera</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1847399</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1847399</link>
			<description><![CDATA[синтаксис в угоду компактности, для которой собственно лямбда и предназначена]]></description>
			<pubDate>Fri, 31 Jul 2009 11:34:19 GMT</pubDate>
			<author>xiWera</author>
		</item>
	

	
		<item>
			<title>31.07.2009 11:33:21 xiWera</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1847395</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1847395</link>
			<description><![CDATA[наверное ваш пример должен выглядеть так:<br/>
<br/>
int f(){<br/>
int *ptr = new int(0);<br/>
return [=](){ return (*ptr)++ };<br/>
};<br/>
<br/>
да вы тут потеряете память, но причем тут лямбда функции?<br/>
<br/>
точно также можно написать без лямбды:<br/>
<br/>
int f(){<br/>
int *ptr = new int(0);<br/>
return (*ptr)++;<br/>
};<br/>
]]></description>
			<pubDate>Fri, 31 Jul 2009 11:33:21 GMT</pubDate>
			<author>xiWera</author>
		</item>
	

	
		<item>
			<title>31.07.2009 11:18:55 shamaniac</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1847348</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1847348</link>
			<description><![CDATA[Что-то у нас не выходит осмысленного обсуждения. Я привожу пример который хочется записать одной строчкой а вы мне объясняете что я ничего не понимаю и с указателями так работать нельзя. То ли у меня не получается выражать свои мысли то ли у вас их понимать а может и то и другое. Я думаю стоит свернуть дискуссию и признать что вы во всем правы =).]]></description>
			<pubDate>Fri, 31 Jul 2009 11:18:55 GMT</pubDate>
			<author>shamaniac</author>
		</item>
	

	
		<item>
			<title>31.07.2009 11:15:10 xiWera</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1847328</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1847328</link>
			<description><![CDATA[вы всегда так бесстрашно с сырыми указателями в с++ работаете? :) <br/>
<br/>
я еще мощнее вам могу пример рассказать из с++<br/>
<br/>
int *f(){<br/>
int val = 0;<br/>
return &val;<br/>
};<br/>
<br/>
тут уже выше неоднократно высказывалось, что если инструмент позволяет гвоздь и забить, и закрутить и закатать внутрь стены, а мастер знает только то что инструмент для закатывания, то мастер сам себе дурак :)]]></description>
			<pubDate>Fri, 31 Jul 2009 11:15:10 GMT</pubDate>
			<author>xiWera</author>
		</item>
	

	
		<item>
			<title>31.07.2009 11:10:49 shamaniac</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1847313</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1847313</link>
			<description><![CDATA[void f() {<br/>
int* ptr = new int(0);<br/>
return [=](){return (*ptr)++;};<br/>
}<br/>
<br/>
по мне так все нормально с доступом к перемнной на стеке в текущем блоке и передавать ее надо по значению. В другом месте надо по ссылке передать. Так что не все понятно.]]></description>
			<pubDate>Fri, 31 Jul 2009 11:10:49 GMT</pubDate>
			<author>shamaniac</author>
		</item>
	

	
		<item>
			<title>31.07.2009 11:06:20 xiWera</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1847288</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1847288</link>
			<description><![CDATA[как это мало знает? :)<br/>
<br/>
лямбда функция живет в блоке кода :) ей доступны переменные «на стеке» из этого блока, по выходу из блока все прекрасно «со стека» уберется :)<br/>
<br/>
лямбда функция переданная как параметр в другой блок — не имеет доступа к переменным текущего блока :) поэтому никаких проблем без сборщика мусора нет.<br/>
<br/>
Вообще в старом с++ всё тоже самое можно было бы сделать «ручками» написав чтото типа<br/>
<br/>
class MyLambda{<br/>
sometype &someval;<br/>
sometype &someval;<br/>
…<br/>
public:<br/>
MyLambda( &some, &some… );<br/>
void operator()( params )<br/>
};<br/>
<br/>
но каждый раз это делать несколько задалбывает]]></description>
			<pubDate>Fri, 31 Jul 2009 11:06:20 GMT</pubDate>
			<author>xiWera</author>
		</item>
	

	
		<item>
			<title>31.07.2009 10:55:26 xiWera</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1847250</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1847250</link>
			<description><![CDATA[а какая разница заинлайнин он или нет? это какаято работа, .end() у нас в общем случае это не одна строка кода, смотрим к примеру для вектора:<br/>
<br/>
end()<br/>
{ return iterator(this-&gt;_M_impl._M_finish); }<br/>
<br/>
то есть как минимум каждый раз создание нового итератора, вызов его конструктора и деструктора по выходу из блоков.<br/>
<br/>
а если посмотреть в std::string::end() или еще какой-нибудь сложный контейнер?<br/>
<br/>
]]></description>
			<pubDate>Fri, 31 Jul 2009 10:55:26 GMT</pubDate>
			<author>xiWera</author>
		</item>
	

	
		<item>
			<title>31.07.2009 09:43:09 shamaniac</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1846939</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1846939</link>
			<description><![CDATA[Хм компилятор который не заинлайнит container.end() в данном случае это что-то страшное =). <br/>
И да я рад возможности писать for_each с лямбдами, но опять же есть достаточно простые пути без него обойтись (даже на странном компиляторе =).<br/>
]]></description>
			<pubDate>Fri, 31 Jul 2009 09:43:09 GMT</pubDate>
			<author>shamaniac</author>
		</item>
	

	
		<item>
			<title>31.07.2009 09:38:47 xiWera</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1846906</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1846906</link>
			<description><![CDATA[оригинально конечно, вы что предпочитаете писать каждый раз<br/>
<br/>
for( iter=container.begin();iter!=container.end(); ++iter){<br/>
//some code on *iter<br/>
};<br/>
<br/>
потом вспоминать, что нехорошо container.end() вызывать каждый раз, на списке из сотен тысяч элементов, и добавлять<br/>
<br/>
end_iter=container.end()<br/>
<br/>
потом вспоминать, что *iter тоже функция и лучше бы ее тоже отдельно взять:<br/>
elem &e= *iter;<br/>
<br/>
не проще ли сразу:<br/>
<br/>
std::for_each( container.begin(), container.end(), [&](){//some code here} );<br/>
<br/>
? :)]]></description>
			<pubDate>Fri, 31 Jul 2009 09:38:47 GMT</pubDate>
			<author>xiWera</author>
		</item>
	

	
		<item>
			<title>31.07.2009 09:33:00 kyb27</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1846867</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1846867</link>
			<description><![CDATA[хммм… в принципе, картина прояснилась. Спасибо.]]></description>
			<pubDate>Fri, 31 Jul 2009 09:33:00 GMT</pubDate>
			<author>kyb27</author>
		</item>
	

	
		<item>
			<title>31.07.2009 09:30:26 havoc_theory</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1846857</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1846857</link>
			<description><![CDATA[В лямбде нет ничего принципиально объектно-ориентированного. Так что логично было бы иметь такой же функционал и в плоском Си.]]></description>
			<pubDate>Fri, 31 Jul 2009 09:30:26 GMT</pubDate>
			<author>havoc_theory</author>
		</item>
	

	
		<item>
			<title>31.07.2009 09:21:35 shai_xylyd</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1846826</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1846826</link>
			<description><![CDATA[что за язык это C/C++?]]></description>
			<pubDate>Fri, 31 Jul 2009 09:21:35 GMT</pubDate>
			<author>shai_xylyd</author>
		</item>
	

	
		<item>
			<title>31.07.2009 09:20:27 shai_xylyd</title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/cpp/65798/#comment_1846824</guid>
			<link>http://habrahabr.ru/blogs/cpp/65798/#comment_1846824</link>
			<description><![CDATA[C++ есть почти под всё, но почти под все он немного различается. Иначе не было бы https://developer.mozilla.org/En/C___Portability_Guide.]]></description>
			<pubDate>Fri, 31 Jul 2009 09:20:27 GMT</pubDate>
			<author>shai_xylyd</author>
		</item>
	

	
</channel>
</rss>

