1. C++ / Говнокод #14471

    +24

    1. 1
    int f(int = 7, int * = nullptr, int (*(*)(double))[3] = nullptr){

    http://ideone.com/BcZ7Ja

    Запостил: LispGovno, 02 Февраля 2014

    Комментарии (36) RSS

    • на гейдеве спор на тему: можно или нельзя так писать?
      Ответить
      • компилится - значит можно
        Ответить
        • Заебись - формулировочка!
          Ответить
          • Есть подозрение, что для гейдева это - негласный стандарт.
            Ответить
            • Для любительского или коммерческого? Я сам далеко не кодофеттишист и был студентом, но одно дело когда играешся с чем-то, а другое дело групповая разработка и поддержка кода, я в принципе ничего не имею против анонимных аргументов в упреждающем определении - но тут контекст не тот.
              Ответить
              • > в принципе ничего не имею против анонимных аргументов в упреждающем определении
                А в чем смысл? Разве что если хочется подгадить юзеру, чтобы ему IDE в подсказках показывало бесмыссленное и беспощадное void test(int, int), с которым без доки не разобраться?

                Имхо, даже в тайпдефе опускание имен аргументов и то сомнительно.
                Ответить
          • показать все, что скрытоЕсть подозрение, что для гейдева это - негласный стандарт.
            Ответить
      • Я так понимаю, заглянуть в стандарт - это скучно, интереснее поспорить?
        Ответить
        • Там спор уже перешел в этическую сторону. Сейчас там уже обсуждается, что это яркий пример презрения к коллегам
          Ответить
          • Там кто-нибудь обратил внимание на фигурную скобку и отсутствие static? Ведь получается, что значения по умолчанию указываются не в прототипе, а в определении функции. Если в прототипе указаны другие параметры или не указаны вообще, но всё идет насмарку.
            Ответить
            • Прототип может быть и определением функции
              Ответить
              • Ну тогда всё равно static забыли.
                Ответить
                • анонимный немспейс? Стасик устарел для глобал. функ.
                  Ответить
                  • У тебя инфа устарела. Они убрали static из deprecated. Пруф: http://stackoverflow.com/questions/4726570/deprecation-of-the-static-keyword-no-more
                    Ответить
            • А что особенного? Метод класса, описанный прямо в его теле выглядит именно так - со скобкой и без статика.
              Ответить
        • ISO/IEC 14882-98 8.3.6 Default arguments
          2. Example: the declaration
          void point(int = 3, int = 4);
          declares a function that can be called with zero, one, or two arguments of type int.
          Ответить
          • Это сишка? Че, неплохо, а именованные параметры есть?
            Ответить
            • в сишке нет параметров по умолчанию
              а именованные параметры, как обычно, уже были в симпсонах есть только в бусте, удобства на улице
              Ответить
              • Так это что было?
                Ответить
                • декларация (объявление) функции с параметрами, имеющими значения по умолчанию
                  а имена параметров необязательны, даже в определении
                  Ответить
                • Какой это язык?
                  Ответить
                  • Кресты же. Смотри на тему топика.

                    В крестах есть дефолтные аргументы (передавать в произвольном порядке нельзя, можно только тупо опускать несколько последних):
                    void test(int x = 5, int y = 7);
                    
                    test(); // test(5, 7);
                    test(42); // test(42, 7);
                    test(42, 100500); // test(42, 100500);
                    А в сишке дефолтных аргументов нет ни в каком виде, как и перегрузки функций.
                    Ответить
                  • Стандарт крестов можно узнать по понтовому номеру в стандарте:
                    ISO/IEC 14882-98
                    Ответить
                    • Я запомнил так: 14+8+8+2=14+16+2=30+2=32;

                      Вот этот всё время забываю ISO/IEC TR 19768:2007, но как-то пофиг.
                      Ответить
                      • Я вот честно скажу: Многое из того, что попало в С++11 именно из этого 2007 TR. Чем занимался комитет 4 года?
                        Ответить
                        • придумывал следующие два стандарта
                          Ответить
                          • Устанавливал даты выхода 14 и 17.

                            14 и 17 - это один стандарт между прочим. Просто предварительный выпуск чтобы компиляторостроители не ждали.
                            Ответить
    • Это массив указателей на функцию возвращающую указатель на инт?
      В таком случае: std::function

      В любом случае тайпдеф здесь бы смотрелся гораздо лучше и понятнее.
      Почему на гейдеве так не любят создавать алиасы типам? Им нравится разбирать месиво из скобочек? Они экономят несколько байт в памяти и несколько наносекунд, когда компилируют? Их возбуждает удар грабель по лбу?
      Ответить
    • Можно, но нахуя зачем? В чем смысл дефолта для переменных, которые все равно не используются, а вернее их даже невозможно использовать? :)
      Ответить
      • Тут не знаю, но std::enable_if
        Ответить
        • Для массива который не пролезет, дабы выбрался второй вариант функции?

          P.S. А зачем вообще люди опускают имена аргументов?
          void test(int width, int height) всяко понятней, чем безликий void test(int, int).
          Ответить
          • void test(int width, int height) дает ложные надежды.
            "Хули он там тестит высоту, ширину какой-то херни"
            "Почему ничего не возвращает? Глобальная магия-шмагия?"
            Ответить
            • Новомода же. Исключение кидает если fail.
              Ответить
    • ГД открыл филиал на ГК? Прямые трансляции уже идут.
      Ответить
    • показать все, что скрытоvanished
      Ответить

    Добавить комментарий