Кресты / Говнокод #12066 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
int a[4]={}; 
void f(void){} 
void functionWithArrayParam(int (&a)[4])
{
        a[3]=4;
} 
void functionWithFunctionParam(void (*f)(void))
{
        f();
}; 
int (&functionReturnArray(void))[4]
{
        return a;
} 
void (*arrayOfFunction[4])(void)={f,f,f,f}; 
void (*functionReturnFunction(void))(void)
{
        return f;
}; 
int main() {
        functionReturnArray()[3]=4;
        functionWithArrayParam(a);
        arrayOfFunction[3]();
        functionWithFunctionParam(f);
        functionReturnFunction()();

Батхертный путь C++
Просветление — состояние полной осознанности (выход за пределы дуального ума)... Это скачкообразное изменение восприятия окружающего мира, знаменующее собой переход к отличной от общепринятой форме мышления. Одновременно является началом открытия чакры «третьего глаза» и трамплином для глубоких изменений сознания. Как витальная форма, тяжело поддается ментальному описанию.
Батхертный путь C++ - путь, которым идут просветленные последователи Дао и Дзен С++, способные писать всё в одном выражении.

Доступность этого пути в C++ усиливает возможности C++ по созданию одного и того же кода самыми разнообразными и очень красивыми способами.

Следуя этому пути можно писать такой крутой код, что все товарищи из команды, работающие над кодом, над которым вы работаете вместе с ними, будут завидовать вам и бить вас за это при каждой встрече с разворота.

Этот принцип батхертного пути C++, лежащий в основе C++, помогает потратить дополнительные 1000% времени на разработку и поддержку C++ программ и получить за это дополнительные деньги. Поэтому C++ крайне выгоден!

Взглянем на малую часть основ этого пути при объявлении массивов и функций в C++:
Док-ва истинности пути к просветлению:
http://ideone.com/FCW4f

Итак, используя эти простые принципы нужно написать массив функций, возвращающих массив функций с параметром функция, принимающая массив функций, возвращающих функцию void (void)? typedef запрещён.

Останется только один! Истинный просветленный носитель разума и света!

Если вы знаете другие основы батхертного пути C++, то искренне прошу поделиться с нами вашими открытыми чакрами.

Запостил: LispGovno LispGovno, (Updated )

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

  • > написать массив функций
    Нельзя вот так вот взять и написать массив функций. Можно только массив указателей на функции.
    Ответить
    • Сори. Это не я. Я лишь разместил объяву. Элсо дельное замечание.
      Ответить
      • Итак, используя эти простые принципы напишем массив указателей на функции, возвращающих массив указателей на функции с параметром указатель на функцию, принимающую массив указателей на функции, возвращающих указатель на функцию void (void)?

        1) Указатель на функцию void (void):
        void (*f)();
        2) массив указателей на функции, возвращающих указатель на функцию void (void) в доме который построил Джек:
        void (*(*[])())();
        3) Указатель на функцию, принимающую массив указателей на функции, возвращающих указатель на функцию void (void):
        void (*)(void (*(*[])())());
        4) Массив указателей на функции с параметром указатель на функцию, принимающую массив указателей на функции, возвращающих указатель на функцию void (void)
        void (*[]) (void (*)(void (*(*[])())()));[/code] 5) массив указателей на функции, возвращающих массив указателей на функции с параметром указатель на функцию, принимающую массив указателей на функции, возвращающих указатель на функцию void (void):
        void (*(*[])()[]) (void (*)(void (*(*[])())()));
        Си - это просто 😉

        P.S. Надеюсь нигде не ошибся.
        Ответить
        • Задание вроде было на крестах, а я не вижу ссылок. Неужели передавал и возвращал указатель на массив? Не путь крестоджедая.
          Ответить
          • Хех, ну как-то так... а теперь задача со звездочкой. Проинициализируй эту переменную при помощи кресто11блядских лямбд в одну строку.
            Ответить
          • Я косячник: "‘f’ declared as function returning an array". Действительно ссылки или указатели забыл. Минусуем мой пост.
            Ответить
            • >я уже ни в чем не уверен.
              void (*(&(*OMG[])())[]) (void (*)(void (*(*[])())()));

              Я не понимаю что в этой всей теме написано, так что проверить тебя не могу. Ждем умных людей. Сорри.
              Ответить
              • > Я не понимаю что в этой всей теме написано, так что проверить тебя не могу.

                Взялся за гуж, не говори, что не дюж.
                Ответить
                  • Дешифратором я и сам проверял, вот он и схавал возврат массива не по ссылке... А я даже не задумался об этом.

                    P.S. Если честно - в практике никогда не возникало даже желания вернуть сишный массив. Указатель на массив в куче, вектор какой-нибудь это часто. А массив ни разу.
                    Ответить
                    • И мне сишный массив по ссылке ни разу не понадобилось возвращать. За все время крестописания. Так что тоже не вижу в этом какого-либо смысла, тк нет контроля за временем жизни такого массива. Вот если однажды кресты научатся собирать мусор из &, то да. А пока это бесполезно. Темболее что у такого массива фиксированная длина. Ждем ещё более опытных товарищей.
                      Ответить
                      • >>Ждем ещё более опытных товарищей.
                        >а разве можно?)
                        Дождались. А у меня между прочим вся надежда была на вас. :-[
                        Ответить
                        • В говнокоде темы код:
                          int a[4]={};
                          int (&functionReturnArray(void))[4]
                          {
                                  return a;
                          }
                          Ответить
                          • ну что ж, согласен - можно, но ссылку

                            единственный случай, когда это хоть как то может пригодиться - внутри в объекте хранится массив статической длины (типа my::array<int, 100>) и мы его пытаемся вернуть по ссылке, чтобы порадовать крестоблпринципиальную систему вывода типов

                            интересно, можно ли в таком классе определить оператор приведения к int[100] & ?
                            Ответить
                            • >можно ли в таком классе определить оператор приведения к int[100] &

                              Думаю и к T[N]& (где T и N - шаблоны).
                              Ответить
                              • я это и имею в виду
                                интересен синтаксис этого извращения

                                > auto
                                нет, скорее передача в
                                template <class T, size_t N>
                                void foo(T (&arg)[N]) { ... some code working with array[N]... }
                                Ответить
                                • Кстати, auto скопирует массив переданный по ссылке или примет его как ссылку? auto вроде всегда копирует, насколько я знаю.
                                  Ответить
                                  • Я предположу, допусим авто скопирует массив переданный по ссылке. Но это будет страннно. При передаче структуры в качестве параметра в шаблонную функцию - она копируется, а при передачи массива - копируется только указатель на массив. Так вот при авто такое поведение не повторяется. что структура, что массив - скопируются.
                                    Ответить
                                  • все гораздо проще
                                    auto без ссылки компилятором выведется как T * вместо T[N]
                                    по очевидной причине - массивы нельзя присваивать, это не структуры
                                    Ответить
                            • >единственный случай, когда это хоть как то может пригодиться - внутри в объекте хранится массив статической длины

                              Это очевидно, но я с трудом могу представить себе, когда это реально нужно.

                              > чтобы порадовать крестоблпринципиальную систему вывода типов

                              auto? Вроде проблем быть не должно?
                              Ответить
                        • >Батхертный путь C++
                          Кстати, похоже ОП пытался сделать отсылку к какой-то книге:
                          Читал я вроде какую-то книгу "Бархатный путь C++" или что-то подобное.
                          Ответить
                        • Да. С точки зрения архитектуры никаких технических проблем для возврата таких ссылок на массивы быть не может для языка. Сссылка - тот же указатель, так что даже на х86 влезет в eax без каких-либо проблем. Поэтому это в крестах и реализовали. Темболее что указатель на массив няшная сишка и раньше умела возвращать. Так что крестостандартизаторы просто сохранили старое поведение и для ссылок.
                          Ответить
        • Я не копипастер. Конечно я. Ты лучше покажи где твой говнокод на крестошаблонах? Я не нашел.
          Ответить
          • Вафлейме
            в разделе програмиррование
            совсем искать разучился
            Ответить
  • Извините конечно, но "Где здесь C++"?

    Указатели на функции - это Си 🙂
    Ответить
  • С++ хороший и годный язык, если уметь на нём писать. Просто не используйте говношаблоны, говноссылки, говноисключения и говнообъекты.
    Ответить
  • - Я понял! - заявил парень. - Это из-за истерики, которую я вчера закатил Вам?
    Ответить

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

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8