На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (78) « Первая ... 28 29 [30] 31 32 ...  77 78  ( Перейти к последнему сообщению )  
> Текущий Стандарт С++ и перспективы его развития
    Цитата olias @
    Да. В бусте эту идею эмулировали, в Boost.Assign.

    Ну все-таки это вещи очень разные.
      Цитата miksayer @
      это чтобы можно было перегружать оператор = для такого случая:
      ExpandedWrap disabled
        SomeClass a = {1, 2, 3}

      ?

      Тут нет присваивания.
        Цитата Masterkent @
        Тут нет присваивания.

        в каком смысле? а что тогда?

        Добавлено
        Цитата olias @
        Да. В бусте эту идею эмулировали, в Boost.Assign.

        а каким примерно образом эмулировали? а то я не очень себе представляю, как это возможно
          Цитата miksayer @
          в каком смысле? а что тогда?

          Вызов конструктора.
            miksayer
            тут примеры. Не один-в-один, конечно, но похоже да и всяко удобнее, чем через промежуточный Си-массив.
              Цитата olias @
              miksayer
              тут примеры. Не один-в-один, конечно, но похоже да и всяко удобнее, чем через промежуточный Си-массив.

              А зачем это вообще нужно? Что неужели сложно сделать push_back или insert? Вот std::initializer_list другое дело. Инициализация при конструировании действительно полезна.
                D_KEY
                То есть, вместо "vector<int> v; v += 1,2,3,7,8,9;" предлагаешь писать
                ExpandedWrap disabled
                  vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(7); v.push_back(8); v.push_back(9);

                ?

                Цитата D_KEY @
                Вот std::initializer_list другое дело.

                Понятно, что другое, но для него нужна поддержка компилятором, а она есть пока только в гцц.
                  Цитата D_KEY @
                  А зачем это вообще нужно? Что неужели сложно сделать push_back или insert?

                  Для инициализации статических или глобальных контейнеров - очень даже удобно.
                    Цитата olias @
                    D_KEY
                    То есть, вместо "vector<int> v; v += 1,2,3,7,8,9;" предлагаешь писать
                    ExpandedWrap disabled
                      vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(7); v.push_back(8); v.push_back(9);

                    ?

                    Во-первых, совершенно не вижу смысла писать все в одну строку.
                    Во-вторых, а что тебе не нравится?
                    В-третьих, можно и так:
                    ExpandedWrap disabled
                      int t[] = {1,2,3,7,8,9};
                      vector<int> v(t, t + sizeof(t));

                    Не вижу достаточных оснований менять семантику оператора.
                    И вообще, я не понимаю, для чего было разрешать перегрузку operator,(равно как и && и ||).
                    Сообщение отредактировано: D_KEY -
                      Цитата D_KEY @
                      я не понимаю, для чего было разрешать перегрузку operator,

                      для списков, и для DSL
                      например если надо задать список T, то можно использовать T[]
                      но если надо задать список разных типов - то очевидно лучший вариант - перегрузка ,
                      my_array a; a+=1,"2",complex(3,4);

                      насчет DSL - посмотри на boost.spirit, как там используется перегрузка , && ||
                      Сообщение отредактировано: GoldFinch -
                        Цитата GoldFinch @
                        но если надо задать список разных типов - то очевидно лучший вариант - перегрузка ,
                        my_array a; a+=1,"2",complex(3,4);

                        А для меня очевидно, что это не стоит изменения семантики. , - это такой же "оператор", как ;. Может и это следует разрешить перегружать?
                        Есть tuple в бусте и в новом стандарте.
                        И ничего страшного в:
                        ExpandedWrap disabled
                          my_array a;
                          a += 1;
                          a += "2";
                          a += complex(3,4);

                        Я не вижу. А код гораздо читабельнее(ибо семантика не меняется).
                          D_KEY, ты не видишь - другие видят; не знаешь зачем - другие знают.
                          ; - в терминологии С++ это не оператор, читай стандарт
                          в С++ вообще много что надо изменить и добавить
                            Цитата GoldFinch @
                            D_KEY, ты не видишь - другие видят; не знаешь зачем - другие знают.

                            Естественно.

                            Цитата
                            ; - в терминологии С++ это не оператор, читай стандарт

                            Я в курсе ;) . Я кавычки не зря поставил.
                            Мне не ясно почему , можно перегружать.

                            Цитата
                            в С++ вообще много что надо изменить и добавить

                            :yes-sad:
                              D_KEY, не хочешь перегружать , - не перегружай, но другим-то зачем не давать?

                              поиск "operator(\s*),(\s*)\(" в boost/ показывает что перегрузка , используется в
                              assign, python, proto, spirit, test
                                Цитата GoldFinch @
                                D_KEY, не хочешь перегружать , - не перегружай, но другим-то зачем не давать?

                                Так я говорю, давай перегрузим ; или ?:
                                Понимаешь, есть "необычные" "операторы", поведение которых строго определено и отличается от семантики вызова функции. То есть вводя перегрузку таких операторов ты меняешь их суть. В результате понять, что и в какой последовательности делает код не всегда представляется возможным.
                                К таким "операторам" относятся, например, запятая, ||, &&, ?:. Из них запрещен только ?:.
                                Сообщение отредактировано: D_KEY -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (78) « Первая ... 28 29 [30] 31 32 ...  77 78


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0626 ]   [ 16 queries used ]   [ Generated: 20.06.25, 16:43 GMT ]