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

    +49

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    #include <iostream>
     
    int get_number() {
    	return 5;
    }
     
    int magic_number(int foo()) {
    	return foo();
    }
     
    int main(void)
    {
    	std::cout << magic_number(get_number) << std::endl;
    }

    http://ideone.com/TbV0jD

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

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

    • std function больше не нужен. Крестосинтаксис и так читается.
      Ответить
      • P.S. А std::function нужен, ибо что-то сложнее статической функции или глобалки так не пропихнешь.
        Ответить
        • А что, в сишках тоже есть процеДурные типы?? Щ-_щ
          Ответить
    • Эээ, а с какого стандарта можно передавать функцию не по указателю?!
      Ответить
      • видимо со следующего
        Ответить
        • Да нет, на c++98 с педантиком компилится. Постоянно узнаю о крестах что-то новое.
          Ответить
          • ты о какой строчке - о 7 или 13? Вроде для функций всю жизнь было автоприведение к указателю.
            Ответить
            • О седьмой. Я всегда там звёздочку рисовал, как в сишке. Не знал, что можно её опустить.
              Ответить
              • Разве ты не натыкался на столь великолепное
                T my_obj(); // default ctor? WRONG. Function declaration/prototype.
                Ну а параметры функций вроде как эквивалентны локальным декларациям. Хотя я тоже всегда звёздоку пишу.
                Ответить
              • int func(void) { return 0; }

                int (*func1)(void) = *func;
                int (*func2)(void) = &func;
                int (*func3)(void) = func;
                int (*func4)(void) = ****func;

                вообще по барабану, функции всегда приводятся к указателю.
                Ответить
          • Может это гцц?
            Ответить
      • в С имя функции - это уже указатель. (аналогично массивам.)
        Ответить
        • Блин. Ну сколько можно тупить и считать борманда за идиота. Ведь уже не первый. Он про звездочку, а не амперсанд
          Ответить
    • Шутки за три сотни.
      Ответить
    • Хотел поставить плюсик, а ткнул в минус:(
      Сожалею о содеянном.
      Вообще, очень интересный нюанс, который опущен в литературе и не популярен у кодеров (ещё не встречал такой вариант)...
      Надобно в стандарте покопаться.
      Ответить
      • >Вообще, очень интересный нюанс, который опущен в литературе и не популярен у кодеров
        Вы только что охарактеризовали половину постов раздела С++ на Говнокоде.
        Вот это «очень интересный нюанс» может колебаться от «ух ты, кресты и так умеют», до «нашёл наступил на очередные граблки в блядских крестах FFFffffuuu~ »
        Ответить
      • > опущен в литературе и не популярен
        А вот и нет.
        Я о таком способе объявления указателя на функцию узнал из книги Мейерса, а окончательно "закрепил материал" в доках к boost::function, в них аргументом шаблона передается тип указателя на функцию в таком сокращенном виде, как в коде поста.
        Ответить
        • Кстати std::function тоже принимает тип в виде без звёздочки.
          Ответить
          • Тип - да. Но я не знал, что и значение так можно пропихнуть. Переменную то без звёздочки не опишешь. А вот параметром почему-то канает.
            Ответить
      • > опущен в литературе
        И сидит под нарами.
        Ответить

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