
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.21] |
![]() |
|
Страницы: (78) « Первая ... 64 65 [66] 67 68 ... 77 78 ( Перейти к последнему сообщению ) |
![]() |
Сообщ.
#976
,
|
|
А зачем этот разделитель вообще нужен?
|
![]() |
Сообщ.
#977
,
|
|
Цитата Axis @ Это типичная и отнюдь не новая проблема. std::complex<int> будет вести себя так же. Решается, если очень хочется, частичной специализацией по std::numeric_limits<T>::is_integer.circle_area(10) на выходе получим очень точную площадь равную 300. 314 никак и не получится даже. Цитата Axis @ Наверное, там не с бухты барахты выбрали разделитель. Варианты рассматривались. Этот символ не мог ранее встречаться в числовых литералах, поэтому обратная совместимость наличествует. Регулярка для синтаксических колоризаторов лишь чуть усложнится. Ну и в принципе не понимаю, какую траву авторы стандарта курили, чтобы сделать ' разделителем в числе, чтобы убить к чертям подсветку синтаксиса в редакторах? Добавлено Суть не в этом, это просто пример. Суть в "...allow to declare and init non-static data members for the closure object...". В своё время я был немало удивлён отсутствием этой возможности, хотя интуитивно она должна была поддерживаться. Добавлено OpenGL, для повышения читабельности. Компиляторам несложно, человеку приятно и удобно. Пробовал писать в программе long long литералы? |
![]() |
Сообщ.
#978
,
|
|
Цитата Qraizer @ OpenGL, для повышения читабельности. Компиляторам несложно, человеку приятно и удобно. Пробовал писать в программе long long литералы? Ну так мало кто, сейчас набирает код в txt-редакторе. Я к тому, что эту фичу можно было бы просто вшить в редактор в виде подсветки синтаксиса (если бы триады там посдвечивались разной степенью яркости ну или бы автоматически разделялись отступом (которого в самом тексте, естественно - нет)). |
Сообщ.
#979
,
|
|
|
Цитата Chow @ Не хочу разводить тут очередной холивар Ну так мало кто, сейчас набирает код в txt-редакторе. ![]() ![]() |
Сообщ.
#980
,
|
|
|
На самом деле ' в качестве разделителя триад/тетрад не так уж сильно портит алгоритмы подсветки. Во-первых, никто не заставляет его использовать, кому мешает - может спокойно обходиться без разделителя (да не так уж и часто он может пригодиться). Во-вторых, апостроф легко внести в регулярное выражение, описывающее число. Поскольку в качестве разделителя разрядов он будет встречаться только после начала числа между цифрами, с началом символьного литерала (тем более с его окончанием) его не спутаешь. Я так понимаю, он будет просто игнорироваться.
|
Сообщ.
#981
,
|
|
|
Цитата Алексей_Л @ а чем отличается: ![]() ![]() auto f = [lower = lower_bound(), upper = upper_bound() ] (int x) -> int { if (x<lower) return lower; if (x>upper) return upper; return x; }; от ![]() ![]() auto f = [] (int x) -> int { auto lower = lower_bound(); auto upper = upper_bound(); if (x<lower) return lower; if (x>upper) return upper; return x; }; в первом случае lower и upper - это поля объекта, во втором - локальные переменные... не чувствую никакой разницы кроме читабельности: в первом случае внутри лямбды - только алгоритм, а во втором - нет огромной первой строки В примере не показано, но алгоритмы (lower_bound, upper_bound) принимают параметры. Если вызывать алгоритмы внутри лямбды, она захватит эти параметры, хотя ей нужен только результат. Раньше можно было записать результат алгоритма в локальную переменную и передать его лямбде, так что улучшение не очень значительное. ИМХО это ввели чтобы можно было перемещать переменные в лямбду по rvalue-ссылке: ![]() ![]() std::vector<int> v = {0,1,2,3,4}; auto lambda = [v=std::move(v)]() { // Теперь лямбда владеет вектором. } |
![]() |
Сообщ.
#982
,
|
|
Цитата Kray74 @ Судя по всему в примере вызываются не std::алгоритмы. Как насчёт методов какого-нибудь самописного класса-контейнера, где лямбда определяется тоже в одном из его методов? В примере не показано, но алгоритмы (lower_bound, upper_bound) принимают параметры. |
![]() |
Сообщ.
#983
,
|
|
Цитата Qraizer @ OpenGL, для повышения читабельности. Тогда бы как в яве сделали - там можно писать 1_000_000_000. Вполне удобно получается. Добавлено Цитата Славян @ но по своему десятку знакомых скажу, что таких - много. В notepad++ или аналогах - вполне может быть. В блокноте без подсветки - вряд-ли. |
Сообщ.
#984
,
|
|
|
Так не толко в яве, а во многих языках
![]() |
![]() |
Сообщ.
#985
,
|
|
Ну я только про яву слышал
![]() |
Сообщ.
#986
,
|
|
|
Цитата Qraizer @ Цитата Kray74 @ Судя по всему в примере вызываются не std::алгоритмы. Как насчёт методов какого-нибудь самописного класса-контейнера, где лямбда определяется тоже в одном из его методов?В примере не показано, но алгоритмы (lower_bound, upper_bound) принимают параметры. Вполне возможно. |
Сообщ.
#987
,
|
|
|
Ну в Ruby, например. Сейчас так сходу не скажу, возможно с "много" я погорячился.
Добавлено В C++ скорее всего _ вступит в конфликт с user defined literals. |
Сообщ.
#988
,
|
|
|
Цитата Qraizer @ Суть не в этом, это просто пример. Суть в "...allow to declare and init non-static data members for the closure object...". В своё время я был немало удивлён отсутствием этой возможности, хотя интуитивно она должна была поддерживаться. хм, спасибо, не знал, что вообще так можно - обращаться к полям лямбды но почему-то эти самые поля - read only: ![]() ![]() #include <iostream> void fun(auto f) { f(); std::cout << f.callCount; } int main() { auto lambda = [callCount = 0] () { ++callCount; }; fun(lambda); } ругается: Цитата C:\Projects\Qt\CPPConsoleTest\main.cpp:10: ошибка: increment of read-only variable 'callCount' ++callCount; ^ P.S. GCC 4.9.1 |
![]() |
Сообщ.
#989
,
|
|
А так?
![]() ![]() auto lambda = [callCount = 0] () mutable { ++callCount; }; |
Сообщ.
#990
,
|
|
|
Цитата Qraizer @ А так? заработало, спасибо а я пытался перед именем поля mutable писать... |