Сообщение Re[7]: Не распарсил конструкцию с [] от 30.01.2022 17:36
Изменено 30.01.2022 20:26 Андрей Тарасевич
Re[7]: Не распарсил конструкцию с []
Здравствуйте, AlexGin, Вы писали:
AG>Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>>[&, i] — допустимо. Общий захват — по ссылке, i — по значению.
АТ>>[&, &i] — ошибка. Нельзя захватывать i по ссылке, если общий захват и так по ссылке.
АТ>>[=, i] — ошибка. Нельзя захватывать i по значению, если общий захват и так по значению.
АТ>>[=, &i] — допустимо. Общий захват — по значению, i — по ссылке.
АТ>>http://eel.is/c++draft/expr.prim.lambda#capture-2
АТ>>http://coliru.stacked-crooked.com/a/9fd6075650e3b6b8
AG>Мне хорошо запомнилась статья на "хабре", которую использую уже несколько лет, в качестве руководства:
AG>https://habr.com/ru/post/66021
Статья по ссылке содержит ту же ошибку:
Нет, так в С++ не разрешается.
Возможно дело в том, что статься писалась в 2009, то есть до выхода финальной версии стандарта и в черновике подобное еще допускалось. Как я сказал выше, это выглядит как вполне логичная возможность. Меня удивляет, что ее запретили. Интересно было бы узнать, почему.
---
Порылся в черновиках: нет, даже самые ранние версии черновика С++11, в которых уже появилось описание лямбда-выражений (N2588, 2008 год), сразу запрещали такую избыточность в захватах. То есть статья на хабре по-видимому писалась очередным "практиком" и любителем "де факто", изучавшим С++ по разудалому творчеству GNU-шных студентов: GCC по умолчанию рапортует эту ошибку через "warning".
Опять же, мне это ограничение кажется странным (как, видать, и "GNU-шных студентам"). Интересно было бы узнать, почему его ввели.
AG>Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>>[&, i] — допустимо. Общий захват — по ссылке, i — по значению.
АТ>>[&, &i] — ошибка. Нельзя захватывать i по ссылке, если общий захват и так по ссылке.
АТ>>[=, i] — ошибка. Нельзя захватывать i по значению, если общий захват и так по значению.
АТ>>[=, &i] — допустимо. Общий захват — по значению, i — по ссылке.
АТ>>http://eel.is/c++draft/expr.prim.lambda#capture-2
АТ>>http://coliru.stacked-crooked.com/a/9fd6075650e3b6b8
AG>Мне хорошо запомнилась статья на "хабре", которую использую уже несколько лет, в качестве руководства:
AG>https://habr.com/ru/post/66021
Статья по ссылке содержит ту же ошибку:
[&, x, &y] // захват всех переменных по ссылке, кроме x…
Нет, так в С++ не разрешается.
Возможно дело в том, что статься писалась в 2009, то есть до выхода финальной версии стандарта и в черновике подобное еще допускалось. Как я сказал выше, это выглядит как вполне логичная возможность. Меня удивляет, что ее запретили. Интересно было бы узнать, почему.
---
Порылся в черновиках: нет, даже самые ранние версии черновика С++11, в которых уже появилось описание лямбда-выражений (N2588, 2008 год), сразу запрещали такую избыточность в захватах. То есть статья на хабре по-видимому писалась очередным "практиком" и любителем "де факто", изучавшим С++ по разудалому творчеству GNU-шных студентов: GCC по умолчанию рапортует эту ошибку через "warning".
Опять же, мне это ограничение кажется странным (как, видать, и "GNU-шных студентам"). Интересно было бы узнать, почему его ввели.
Re[7]: Не распарсил конструкцию с []
Здравствуйте, AlexGin, Вы писали:
AG>Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>>[&, i] — допустимо. Общий захват — по ссылке, i — по значению.
АТ>>[&, &i] — ошибка. Нельзя захватывать i по ссылке, если общий захват и так по ссылке.
АТ>>[=, i] — ошибка. Нельзя захватывать i по значению, если общий захват и так по значению.
АТ>>[=, &i] — допустимо. Общий захват — по значению, i — по ссылке.
АТ>>http://eel.is/c++draft/expr.prim.lambda#capture-2
АТ>>http://coliru.stacked-crooked.com/a/9fd6075650e3b6b8
AG>Мне хорошо запомнилась статья на "хабре", которую использую уже несколько лет, в качестве руководства:
AG>https://habr.com/ru/post/66021
Статья по ссылке содержит ту же ошибку:
Нет, так в С++ не разрешается.
Возможно дело в том, что статься писалась в 2009, то есть до выхода финальной версии стандарта и в черновике подобное еще допускалось. Как я сказал выше, это выглядит как вполне логичная возможность. Меня удивляет, что ее запретили. Интересно было бы узнать, почему.
---
Порылся в черновиках: нет, даже самые ранние версии черновика С++11, в которых уже появилось описание лямбда-выражений (N2588, 2008 год), сразу запрещали такую избыточность в захватах. То есть статья на хабре по-видимому писалась очередным "практиком" и любителем "де факто", изучавшим С++ по разудалому творчеству GNU-шных студентов: GCC по умолчанию рапортует эту ошибку через "warning".
Опять же, мне это ограничение кажется странным (как, видать, и "GNU-шным студентам").
AG>Здравствуйте, Андрей Тарасевич, Вы писали:
АТ>>[&, i] — допустимо. Общий захват — по ссылке, i — по значению.
АТ>>[&, &i] — ошибка. Нельзя захватывать i по ссылке, если общий захват и так по ссылке.
АТ>>[=, i] — ошибка. Нельзя захватывать i по значению, если общий захват и так по значению.
АТ>>[=, &i] — допустимо. Общий захват — по значению, i — по ссылке.
АТ>>http://eel.is/c++draft/expr.prim.lambda#capture-2
АТ>>http://coliru.stacked-crooked.com/a/9fd6075650e3b6b8
AG>Мне хорошо запомнилась статья на "хабре", которую использую уже несколько лет, в качестве руководства:
AG>https://habr.com/ru/post/66021
Статья по ссылке содержит ту же ошибку:
[&, x, &y] // захват всех переменных по ссылке, кроме x…
Нет, так в С++ не разрешается.
Возможно дело в том, что статься писалась в 2009, то есть до выхода финальной версии стандарта и в черновике подобное еще допускалось. Как я сказал выше, это выглядит как вполне логичная возможность. Меня удивляет, что ее запретили. Интересно было бы узнать, почему.
---
Порылся в черновиках: нет, даже самые ранние версии черновика С++11, в которых уже появилось описание лямбда-выражений (N2588, 2008 год), сразу запрещали такую избыточность в захватах. То есть статья на хабре по-видимому писалась очередным "практиком" и любителем "де факто", изучавшим С++ по разудалому творчеству GNU-шных студентов: GCC по умолчанию рапортует эту ошибку через "warning".
Опять же, мне это ограничение кажется странным (как, видать, и "GNU-шным студентам").