На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (78) « Первая ... 64 65 [66] 67 68 ...  77 78  ( Перейти к последнему сообщению )  
> Текущий Стандарт С++ и перспективы его развития
    А зачем этот разделитель вообще нужен?
      Цитата Axis @
      circle_area(10) на выходе получим очень точную площадь равную 300. 314 никак и не получится даже.
      Это типичная и отнюдь не новая проблема. std::complex<int> будет вести себя так же. Решается, если очень хочется, частичной специализацией по std::numeric_limits<T>::is_integer.
      Цитата Axis @
      Ну и в принципе не понимаю, какую траву авторы стандарта курили, чтобы сделать ' разделителем в числе, чтобы убить к чертям подсветку синтаксиса в редакторах?
      Наверное, там не с бухты барахты выбрали разделитель. Варианты рассматривались. Этот символ не мог ранее встречаться в числовых литералах, поэтому обратная совместимость наличествует. Регулярка для синтаксических колоризаторов лишь чуть усложнится.

      Добавлено
      Цитата Алексей_Л @
      а чем отличается:
      ...

      Суть не в этом, это просто пример. Суть в "...allow to declare and init non-static data members for the closure object...". В своё время я был немало удивлён отсутствием этой возможности, хотя интуитивно она должна была поддерживаться.

      Добавлено
      OpenGL, для повышения читабельности. Компиляторам несложно, человеку приятно и удобно. Пробовал писать в программе long long литералы?
        Цитата Qraizer @
        OpenGL, для повышения читабельности. Компиляторам несложно, человеку приятно и удобно. Пробовал писать в программе long long литералы?

        Ну так мало кто, сейчас набирает код в txt-редакторе. Я к тому, что эту фичу можно было бы просто вшить в редактор в виде подсветки синтаксиса (если бы триады там посдвечивались разной степенью яркости ну или бы автоматически разделялись отступом (которого в самом тексте, естественно - нет)).
          Цитата Chow @
          Ну так мало кто, сейчас набирает код в txt-редакторе.
          Не хочу разводить тут очередной холивар :blush: , но по своему десятку знакомых скажу, что таких - много. :yes:
            На самом деле ' в качестве разделителя триад/тетрад не так уж сильно портит алгоритмы подсветки. Во-первых, никто не заставляет его использовать, кому мешает - может спокойно обходиться без разделителя (да не так уж и часто он может пригодиться). Во-вторых, апостроф легко внести в регулярное выражение, описывающее число. Поскольку в качестве разделителя разрядов он будет встречаться только после начала числа между цифрами, с началом символьного литерала (тем более с его окончанием) его не спутаешь. Я так понимаю, он будет просто игнорироваться.
              Цитата Алексей_Л @
              Цитата Kray74 @
              Например.

              а чем отличается:
              ExpandedWrap disabled
                auto f = [lower = lower_bound(), upper = upper_bound() ] (int x) -> int {
                  if (x<lower) return lower;
                  if (x>upper) return upper;
                  return x;
                };

              от
              ExpandedWrap disabled
                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-ссылке:
              ExpandedWrap disabled
                std::vector<int> v = {0,1,2,3,4};
                 
                auto lambda = [v=std::move(v)]() {
                    // Теперь лямбда владеет вектором.
                }
                Цитата Kray74 @
                В примере не показано, но алгоритмы (lower_bound, upper_bound) принимают параметры.
                Судя по всему в примере вызываются не std::алгоритмы. Как насчёт методов какого-нибудь самописного класса-контейнера, где лямбда определяется тоже в одном из его методов?
                  Цитата Qraizer @
                  OpenGL, для повышения читабельности.

                  Тогда бы как в яве сделали - там можно писать 1_000_000_000. Вполне удобно получается.

                  Добавлено
                  Цитата Славян @
                  но по своему десятку знакомых скажу, что таких - много.

                  В notepad++ или аналогах - вполне может быть. В блокноте без подсветки - вряд-ли.
                    Так не толко в яве, а во многих языках :)
                      Ну я только про яву слышал :) А где еще?
                        Цитата Qraizer @
                        Цитата Kray74 @
                        В примере не показано, но алгоритмы (lower_bound, upper_bound) принимают параметры.
                        Судя по всему в примере вызываются не std::алгоритмы. Как насчёт методов какого-нибудь самописного класса-контейнера, где лямбда определяется тоже в одном из его методов?

                        Вполне возможно.
                          Ну в Ruby, например. Сейчас так сходу не скажу, возможно с "много" я погорячился.

                          Добавлено
                          В C++ скорее всего _ вступит в конфликт с user defined literals.
                            Цитата Qraizer @
                            Суть не в этом, это просто пример. Суть в "...allow to declare and init non-static data members for the closure object...". В своё время я был немало удивлён отсутствием этой возможности, хотя интуитивно она должна была поддерживаться.

                            хм, спасибо, не знал, что вообще так можно - обращаться к полям лямбды
                            но почему-то эти самые поля - read only:
                            ExpandedWrap disabled
                              #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
                            Сообщение отредактировано: Алексей_Л -
                              А так?
                              ExpandedWrap disabled
                                    auto lambda = [callCount = 0] () mutable {
                                        ++callCount;
                                    };
                                Цитата Qraizer @
                                А так?

                                заработало, спасибо
                                а я пытался перед именем поля mutable писать...
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (78) « Первая ... 64 65 [66] 67 68 ...  77 78


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,1188 ]   [ 16 queries used ]   [ Generated: 18.06.25, 01:20 GMT ]