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

    +19

    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
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    struct Base { };
    
    struct Class : Base
    {
        int mem{ 0 };  // init non-static data member
    
        Class(int i)
        : Base{}   // init base class
        , mem{i}   // init member
        {
          int j{i};   // init local var
    
          int k = int{0};  // init temporary
    
          f( { 1 } );  // init function arg
    
          int* p = new int{1};  // new init
    
          // int k(int());  // most vexing parse, declares function
          int k{ int{} };   // ok, declares variable
    
          int i[4]{ 1,2,3,4 };   // init array
        }
    
        Class f(int i)
        {
          return { i };   // init return value
        }
    };
    
    Class c{1};   // init global var

    Запостил: LispGovno, 28 Января 2013

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

    • Што это за говно. Оно работает?
      > return { i };
      Чаем подавился.
      Ответить
      • Не, не работает: https://ideone.com/7wC3xb. Но блядокресты уже почти скатились на самое днище.
        Ответить
        • Если какая синтетическая гумнохуита не компилится, непонятно в чем вина плюсов?
          PS Именно то что мне понравилось - работает.
          https://ideone.com/xUi3Bl
          Остальное бред какой-то. Вот не знаю плюсовать или нет.
          Ответить
          • Не работает же по ссылке.
            Ответить
            • > return { i };
              Уже работает. Причем без ворнингов.
              Ответить
              • Все равно ебаное адилище. Только Pure C / Objective-C, только хардкор.
                Ответить
    • >блядокресты уже почти скатились на самое днище.
      Та да. Это они серъезно. Пиздец эзотерика.
      http://stackoverflow.com/questions/13267277/where-can-we-use-list-initialization
      Ответить
      • Цпп и так то был не самым простым языком, так они еще и синтаксис в какой-то непарсябельный пиздец превратили...
        Ответить
        • То была заметная тенденция - усложнять язык.
          Но тут ебанулись пуще прежнего.
          С++ удивляет меня каждый месяц. Сколько нового узнаю.
          Ответить
          • На квадратные скобки навесили лямбды, на фигурные - списки. Нпдо еще дать дополнительную пару смыслов треугольным. А то синтаксис крестов слишком прост и недвусмысленен.

            P.s. кто же победит в чемпионате по ебанутости синтаксиса и семантики? Кресты15 или перл7?
            Ответить
            • Нужно срочно придумать и запатентовать принципиально новый вид скобок.
              Ответить
              • кругловадратногурные например
                Ответить
                • Не, в виде маленькой жопки, вот аналог закрыващейся 3
                  Ответить
                  • Вот можно E и 3 использовать как парные скобки.
                    Конечно, иногда они должны быть частями цифр и переменных, но крестоблядской контекстно-зависимой грамматике не привыкать.
                    Ответить
                    • Тройка конечно очень заманчиво ввиду жопного сходства, но могу предложить тогда ещё такие варианты:
                      W и M,
                      R и Я, V и Л (тут надо чтоб Unicode поддерживался в базе, конечно же, ну и шрифт желательно "правильный" выбрать),
                      о_О и О_о (Возможны вариации),
                      p и d, b и d, q и р,
                      (: и :) (cамый не очевидный из представленных вариантов).
                      Ответить
                      • Предлагаю выкинуть llvm и объединить C++ и Perl. Второй будет выступать в роли интерпретатора.
                        Ответить
                      • В японской части столько клёвых скобок! 〈〉《》「」『』【】〔〕〖〗〘〙〚〛
                        Ответить
          • А фишка то все-таки годная:
            void test(std::initializer_list<int> a) {
                std::cout << "Size: " << a.size() << std::endl;
                for (auto &x : a) {
                    std::cout << x << std::endl;
                }
            }
            
            int main() {
                test({1, 2, 3});
                return 0;
            }
            Но вот зачем извратили синтаксис и дали писать всякие там int a{4} - х.з., до меня пока не доходит.
            Ответить
            • сделали, т.к. раньше ныли, что int i(); означает совсем не инициализацию переменной по умолчанию
              теперь будут ныть, что int func {}; молча объявит глобальную переменную, а не ошибку в паскале-функции с опущенными параметрами (спасет только то, что Тарас доберется до c++11 лет через 10)
              Ответить
    • Всё работает. Это с сайта догматиков и распространителей библии стандарта и служителей культа крестов.
      http://liveworkspace.org/code/1F1UaY$3
      Ответить
    • хм, так глядишь какой нить C++1N можно будет не отличить от хаскела/перла/пролога, можно будет писать все и как угодно
      Ответить
      • Что это вы Хаскелл и Перл рядом поставили? В Хаскелл хитрость только в том, что правила именования идентификаторов очень свободные, поэтому можно писать программы из одних знаков препинания, стрелок, скобок и одиночных букв. А в остальном синтаксис там довольно простой, однородный и однозначный.

        Если на то пошло, на любом языке можно писать в той или иной степени нечитаемую кашу. Вопрос в том, насколько сложны правила синтаксического анализа. C++ лично для меня, как для человека далекого от темы, выглядит гораздо сложнее большинства других языков именно из-за всех этих частных случаев синтаксиса.
        Ответить
        • Я иногда сижу, смотрю на кусок кода на C++ и вижу нечитаемую кашу в довольно простой декларации. "Может, я неправильно выбрал схему именования?" думаю я. Ради интереса меняю имена типов (к примеру, с ram_storage на RamStorage). Жаль, но остаётся всё такая же нечитаемая каша.
          Ответить
        • к слову в хаскеле всё темплейты с выключенным мономорфизмрестрикшен, но при этом пишется весьма хорошо без этого нечитаемого template typename блаблабла
          Ответить
        • та я утрирую шо вы вздулись сразу:)
          Ответить
    • Нужно добавить в списки инициализации еще немного рекурсии, функций высших порядков, лямбда выражений, динамическую типизацию и встроенный compile time Lisp интерпретатор для инициализации готов.
      Было: int i = 0;
      Все это для слабаков настоящий кресто-джедай будет теперь любую ручную инциализацию заменять Lisp программой которая возвращает нужное значение.
      Cтало: int j { ( - (+ (* 0 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6)) 57) };
      Профит же.
      Ответить
      • лично я конечно непротив таких "плюшек", если их применять не в угоду читаемости кода и там где это действительно нужно. просто с++11 введя свои лямбды и тд дает народу непаханое поле для синтаксических и алгоритмических извращений. имхо имхо:)
        Ответить
      • Общий посыл поста безусловно правильный. Но!
        >заменять Lisp программой
        Видя такой пиздец становится приятно вспоминать о том что есть именно lisp и js, с минималистичным универсальным синтаксисом, которые тем не менее умеют всё что и кресты, а то и больше.
        js в новых стандартах хотят усложнить и испортить.
        > int j { ( - (+ (* 0 (+ (* 2 4) (+ 3 5))) (+ (- 10 7) 6)) 57) };
        Та это ж легко читается, а когда скобки разные и одни и те же скобки обозначают разное в зависимости от контекста- вот труЪ С++.
        Ответить

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