Rel Вы не могли бы дать ссылочку, по которой Вы обращаетесь за стандартами C++ - то есть откуда вы взяли "The binding of operators in C and C++ is specified (in the corresponding Standards) by a factored language grammar, rather than a precedence table. This creates some subtle conflicts. For example, in C, the syntax for a conditional expression is" и т.д. Думаю, что некоторые вещи полезно мне будет почитать.
Rel Кстати вот нашел одну очень интересную красивую тернарную команду: Код (Text): --b?b:b=-999 Та еще фишка Столько смысла кроется за 12-ю символами
вот это тоже компилируется: Код (Text): for(;P(" "),R--;P("|"))for(e=C;e--;P("_"+(*u++/8)%2))P("|"+(*u/4)%2);
это тоже: Код (Text): main(argc, argv) int argc; char **argv; { while (*argv != argv[1] && (*argv = argv[1]) && (argc = 0) || (*++argv && (**argv && ((++argc)[*argv] && (**argv <= argc[*argv] || (**argv += argc[*argv] -= **argv = argc[*argv] - **argv)) && --argv || putchar(**argv) && ++*argv--) || putchar(10)))) ; }
http://www.google.ru - абсолютно серьезно... что это? я видел подобное в цикле, подобным образом заполняли строку символами, но то было тоже из серии roвнокода... да тут просто https: трактуется, как метка, а все, что после // - комментарий) знаю, знаю... капитан очевидность...
Rel Это пример из книги Философия Си++, не думаю что её автор пишет гуанокодом... В том случае если декрементированное значение переменной b отлично от нуля, оно присваивается переменной b, в противном случае ей присваивается -999;
Rel Кстати если вы для проверки своих знаний (ну чисто для себя) захотите сдать экзамен на INTUIT по Си++, вы убедитесь что в тестовых вопросах там полно того, что вы называете гуанокодом. Такие вопросики также часто задают на собеседованиях. (когда скобками явно не указана последовательность выполнения операций и нужно вспоминать приоритет).
Nafanya Спрашивается, нахрена. Хороший код должен быть удобочитаем, а не головоломен. В этом плане мне импнируют S выражения, всё очень логично. Возможно мне просто повезло, но мне на собеседования такое не попадалось. Если бы попалось, то я бы подумал нехорошее.
Booster Да что Вы говорите... Вот вполне оправданное применение тернарного оператора (пример GRRRLPower) Код (Text): relative_time += delay == -1 ? delta : delay; Получается одна строка вместо 5. Без знания приоритетов тут никак.
Зачем? Вот во многих других языках такого нет. И что, это как-то портит жизнь? Не смешите. ^) Оптимальность программы мерите в строках? Мне программу писать нужно, а не приоритеты зубрить по ночам. Юношеский максимализм детектед.
да это бред... помните в одной серии советского Шерлока Хоумса была такая фраза, мол мозг это как чердак, дурак забивает его всем подряд, а в моем чердаке хоть и мало вещей, но я всегда знаю, что с ними делать и как их найти... я помню меня по молодости спрашивали чем стдкол отличается от цдецс например, но никогда не спрашивали о каких-то редких особенностях языка... просто стоит подумать, если вас заставляют в голове анализировать нечитаемый код, то от вас именно этого и хотят... то есть до вас работал какой-нить задротопрограммер, который понаписал кучу непонятного никому но полезного кода и уволился, а от вас хотят, чтобы вы с этим разобрались))) придумал еще пример тернарного оператора: Код (Text): void FunnyTolower(char* str) { while(*str) { *str++ = *str >= 'A' && *str <= 'Z' ? *str - 'A' + 'a' : *str; }} int _tmain(int argc, _TCHAR* argv[]) { char buf[256]; memset(buf, 0, 256); strcpy(buf, "ToLoWeR TeSt StRiNg!"); FunnyTolower(buf); printf("%s\n", buf); return 0; }
Rel Красиво Если заглавная буква, то преобразуется в прописную, прописная так и остается. И пробег в цикле до нулевого байта строки
Rel Отличный пример когда действительно тернарный оператор лишний. Гораздо понятнее и логичнее использовать if, тогда хотя бы не надо будет выполнять бесполезное присваивание *str++ = *str.
Nafanya Нужно различать вопросы от "профессиональных преподавателей" у которых задача придумать что-нибудь этакое позаковыристей чтобы студенты всю серьёзность момента прочувствовали, от вопросов имеющих непосредственное отношение к практике И если при трудостройстве задают такие вопросы то имхо нужно от такого работодателя держаться подальше, если конечно же не мечтаешь посвятить себя разгребанию совершенно нечитаемого гуанокода )
еще одна порция тернарного бреда: Код (Text): bool func(char*& ch, int val) { *ch++ = val + '0'; return true; } int _tmain(int argc, _TCHAR* argv[]) { char ch[4] = "000"; char* ptr = ch; bool cond = true; cond ? func(ptr, 1) | func(ptr, 2) | func(ptr, 3) : func(ptr, 3) | func(ptr, 2) | func(ptr, 1); printf("%s\n", ch); return 0; } вызов трех функций по условию и веселая ссылка на указатель в параметрах функции))) пример как бы не претендует на адекватность и правильность... просто пример...