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

    +64

    1. 1
    2. 2
    3. 3
    4. 4
    void GetVoid()
    {
    	return delete &"Возвращаем void";
    };

    Функция для получения void.

    Запостил: maxillion, 21 Сентября 2014

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

    • Точка с запятой после закрывающей скобки. Фи!
      Ответить
      • А что, разве нельзя так проинициализировать объект-функцию?
        void GetVoid() {
            return;
        } voidGetter;
        Ответить
        • Жаль, что нельзя описывать void-переменные. В шаблонах было бы к месту.
          Ответить
    • Зачем так сложно?
      void GetVoid() {
          return (void)0;
      }
      Ответить
      • а если вообще ниче не возвращать?
        Ответить
        • Ну это слишком просто. Здесь обсуждается годная фишка - можно "вернуть" void. Например так:
          void bar() { ... }
          void foo() {
              return bar();
          }
          Это важно для шаблонов, чтобы не посвящать void'у особый случай.
          Ответить
          • Так да, можно же.
            Ответить
          • ясно. прокладка все таки нужна
            Ответить
            • > прокладка все таки нужна
              Не нужна. void GetVoid() { } вполне достаточно.

              Речь только о том, что кресты ради удобства позволяют "вернуть" void из функции:
              template <typename T>
              T foo(const std::function<T (int)> &f) {
                  return f(42);
              }
              Вот такая конструкция будет работать и для T = void. Не придется писать лишний частный случай. Вот и всё.
              Ответить
          • В сраных жабах такое полочили. Только заглушку Void.class сделали, а вернуть её в void-методе почему-то нельзя.
            Иногда пишу так:
            return 
            a ? expr1() : 
            b ? expr2() :
            exception();

            Или так: return exception();

            Где exception возвращает тип Т, однако внутри кидает исключение. void естественно не работает.
            Ответить
      • Чем-то жс напомнило
        function getUndef() {
            return void(0);
        }
        Ответить
        • s/void getUndef/function getUndef/ ?
          Ответить
        • В жс типизация настолько нестрогая, что
          function f() {
            return void + 42;
          }


          http://wtfjs.com/2013/02/21/why-am-i-a-number
          Ответить
          • Во что мы наступили!
            Ответить
          • Сложение с voidом очевидно, но вот
            Мамо, чому я Number, это конечно шикарно.
            Ответить
            • Меня ещё беспокоит, чому i+++"2" работает, а i++++"2" без пробелов работать не хочет.
              Ответить
              • >без пробелов работать не хочет.
                Неоднозначность, видимо
                >( i++)+ (+"2" )
                >( i+ ++(+"2" )
                Просто видимо парсер не настолько умён, чтоб понять что константу инкрементить невозможно. Причём даже если на месте "2" будет стоять переменная
                i+ (++(+x))
                +х будет всё-равно константой.
                Ответить
          • От автора WTFJS: https://github.com/brianleroux/xui
            Ответить

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