На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
Страницы: (77) « Первая ... 69 70 [71] 72 73 ...  76 77  ( Перейти к последнему сообщению )  
> Текущий Стандарт С++ и перспективы его развития
    user posted image
      ExpandedWrap disabled
        { auto; }

      ?
        Для красоты упустили return?
          про return компилятор тоже узнает
            Цитата D_KEY @
            ExpandedWrap disabled
              { auto; }

            ?

            Т.е. не смущает, что auto не является контекстно-зависимым ключевым словом, потому им нельзя именовать сущности, да и шаблонными с помощью auto можно делать только лямбды? :)
              А нужно было перечислить все? Мне показалось наиболее интересной auto в качестве тела функции.
                Ну вы блин даёте - это же функция вычисления факториала, сразу видно!
                  А в пятой ветке gcc... типобезопасный printf ждёт своего создателя :whistle:

                  Добавлено
                  Хотя нет, не ждёт - невозможно :yes-sad: Грабли с функцией только времени компиляции всё ещё с нами.
                    Цитата MyNameIsIgor @
                    Грабли с функцией только времени компиляции всё ещё с нами.

                    Нууу... Питер Соммерленд опять выносит мозг compile-time вычислениями на C++14.
                    Скрытый текст
                    Призаюсь честно: когда слушал его вживую, к концу доклада мозг слегка закипел....
                    Сообщение отредактировано: Flex Ferrum -
                      Цитата Flex Ferrum @
                      Цитата MyNameIsIgor @
                      Грабли с функцией только времени компиляции всё ещё с нами.

                      Нууу... Питер Соммерленд опять выносит мозг compile-time вычислениями на C++14.
                      Скрытый текст
                      Призаюсь честно: когда слушал его вживую, к концу доклада мозг слегка закипел....

                      Да это всё понятно... Но я всё ещё не могу остановить компиляцию, если спецификатор в формате не совпадает с выводимым типом!
                      А всё потому, что внутри функции неизвестно является ли контекст константным. Это было бы известно, разреши они constexpr параметры...

                      Добавлено
                      Т.е. я о чём. Вот в коде
                      ExpandedWrap disabled
                        #include <iostream>
                         
                        constexpr int foo(int i)
                        {
                            return i;
                        }
                         
                        int main()
                        {
                            constexpr int i = foo(1);
                            int j;
                            std::cin >> j;
                            int k = foo(j);
                        }

                      нельзя сделать объявить k с модификатором constepr, потому что вызов foo не является constant expression context. И если написать printf
                      ExpandedWrap disabled
                        template<class... Args>
                        void printf(const char* format, Args&&... args)
                        {
                          size_t count = formats_count(format); // не может быть constexpr, т.к. format не является constexpr
                          static_assert(count == sizeof...(Args)); // ошибка, т.к. count не constexpr
                        }

                      А ведь прекрасно всё могло бы быть, если бы я мог написать
                      ExpandedWrap disabled
                        template<class... Args>
                        void printf(constexpr const char* format, Args&&... args)
                        Цитата MyNameIsIgor @
                        А ведь прекрасно всё могло бы быть, если бы я мог написать

                        Ну да. Соммерленд в своей презе как раз жаловался на то, что аргументы constexpr-функций нельзя лифтить в параметры шаблона...
                          Подскажите в двух словах, что тут такого неправильного:
                          ExpandedWrap disabled
                                #define _ПробаПера 24
                          что BDS XE7 ругается:
                          ExpandedWrap disabled
                            [bcc64 Warning] Unit_1.cpp(301): ISO C99 requires whitespace after the macro name
                          ? //Русскоязычные define'ы доступны уж давно, вроде бы... :scratch:

                          Добавлено
                          Видимо, всё же русскими буквами в C99 нельзя, раз он на латиницу перестал ругаться. Эх... :wall:
                            Использование в программе символов за пределами базового символьного набора не запрещается, они входят в расширенный символьный набор, просто его состав implementation defined. Проблема может возникнуть из-за несовместимого с реализацией представления таких символов в исходном коде. Например кириллица в ANSI1251 не будет понята gcc, потому что он использует UTF-8.

                            Добавлено
                            В проблема запросто может относиться к _ в начале имени. Такие имена зарезервированы для использования реализациями в составе библиотек и не должны использоваться в программах.
                              Цитата Qraizer @
                              Например кириллица в ANSI1251 не будет понята gcc, потому что он использует UTF-8.
                              А почему она может быть не понята, если начало - правильное (символ подчёркивания), а дальше - всё, что угодно? Не важно же, что там - кириллица или музыкальные нотки, или китайские иероглифы или ещё что-то! Непонятно. :-?

                              Добавлено
                              Цитата Qraizer @
                              проблема запросто может относиться к _ в начале имени. Такие имена зарезервированы для использования реализациями в составе библиотек и не должны использоваться в программах.
                              Здесь явно не это, т.к. при замене на _RRTT всё перестало ругаться.

                              Добавлено
                              Цитата Славян @
                              Не важно же, что там - кириллица или музыкальные нотки, или китайские иероглифы или ещё что-то!
                              А, понял! Видимо, всё же важно, ибо вот такое, скажем, будет запрещено:
                              ExpandedWrap disabled
                                #define _test[ 24
                              , потому компилятор перестраховывается как бы.
                                Цитата Славян @
                                А почему она может быть не понята, если начало - правильное (символ подчёркивания), а дальше - всё, что угодно?
                                Не что угодно, а символ, разрешённый к использованию в идентификаторах. Если это не так, то лексический разбор текста программы будет неуспешным.

                                Добавлено
                                Вот тут это расписано более подробно.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (77) « Первая ... 69 70 [71] 72 73 ...  76 77


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