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

    +164

    1. 1
    i = j ? k : l = m;

    опять же с форума wasm.ru... пол дня объяснял почему с++ компилятор трактует это выражение как i = j ? k : (l = m), а никак по-другому... не пишите такую чушь никогда)

    Запостил: ReL, 07 Февраля 2011

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

    • а си компилятор выдает ошибку, так как не lvalue)
      Ответить
      • Чойта? А если k и l ссылки?
        Ответить
        • само выражение (j ? k : l) - rvalue в си, по этому к нему нельзя применить оператор =, в си++ же можно спокойно написать например:
          (a ? b : c) = 10
          Ответить
          • Ааа!)
            Ответить
          • и что, 10 будет присвоено либо b либо c?
            я задумываюсь, почему многие языки отказываются это компилировать
            Ответить
    • запарка с приоритетом операций?
      лично я ставлю скобки в сомнительных случаях
      Ответить
      • да, если думать таблицей приоритетов операций, то должно быть по-другому: i = (j ? k : l) = m
        если думать по определению оператора ?:, то все так как есть)))
        скобки просто необходимы в ситуации, когда не уверен как и что будет)))
        Ответить
    • "квадрарный" оператор..?
      Ответить
    • А в оригинале переменные так и назывались?

      (стати, сишный синтаксис - говно).
      Ответить
    • А ссылку на тему можно тогда, если уж пишете "с форума такого-то"?
      Ответить
      • http://www.wasm.ru/forum/viewtopic.php?pid=419150#p419150
        Ответить
    • Спасибо за очередной майндфак.
      Ответить

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