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

    +6

    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
    template <typename T, size_t rows, size_t cols>
    class Matrix {
    public:
        Matrix() :
            m_matrix(reinterpret_cast<T*>(new char[sizeof(T) * rows * cols]))
        {
            memset(m_matrix, 0, sizeof(T) * rows * cols);
            new (m_matrix) T[rows * cols];
    
            if ( rows == cols ) {
                for ( size_t i = 0; i < rows; i++ )
                    m_matrix[i * cols + i] = 1; // FIXME: this is hack
            }
    
        }
    
        // ...
    private:
        T *m_matrix;
    };

    Из прошлого куска.

    Инициализируем память нулями. А вдруг тип скалярный? :)

    Elvenfighter, 01 Декабря 2012

    Комментарии (0)
  2. C++ / Говнокод #12231

    +10

    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
    template <typename T, size_t rows, size_t cols>
    class Matrix {
    public:
        Matrix() :
            m_matrix(new T[rows * cols])
        {
            // Make identity matrix, if possible
            if ( rows == cols ) {
                for ( size_t i = 0; i < rows; i++ )
                    m_matrix[i * cols + i] = 1; // FIXME: this is hack
            }
    
        }
    
        // ...
    
        Matrix<T, rows, cols>& operator =(Matrix<T, rows, cols> &&other) {
            if ( this != &other ) {
                delete [] m_matrix;
                m_matrix = other.m_matrix;
    
                other.m_matrix = new T[cols * rows];
                other = static_cast<const Matrix&>(Matrix());
            }
    
            return *this;
        }
    
        // ...
    };

    Издержки move construtor :)

    Прошу внимания к строчкам 19-23

    Elvenfighter, 30 Ноября 2012

    Комментарии (5)
  3. C++ / Говнокод #12230

    +14

    1. 1
    int main(){(([](){})());}

    preview.tinyurl.com/blrtfuo
    ideone.com/BXrXDR
    Или еще чуть веселее:
    ideone.com/C425yo

    Xom94ok, 30 Ноября 2012

    Комментарии (10)
  4. C++ / Говнокод #12226

    +2

    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
    template <typename A, typename B> 
    class ololo 
    {
    };
    
    template <typename A>
    class ololo <A, int>
    {
    };
    
    template <typename A>
    void bububu ()
    {
    }
    
    template <>
    void bububu <int> ()
    {
    }
    
    template <typename A, typename B> 
    void kokoko  ()
    {
    }
    
    template <typename A>
    void kokoko <A, int> ()
    {
    }

    http://www.gamedev.ru/flame/forum/?id=169781
    tarasboproblemi

    LispGovno, 29 Ноября 2012

    Комментарии (7)
  5. C++ / Говнокод #12225

    +19

    1. 1
    2. 2
    3. 3
    4. 4
    Class1* c1 = (Class1*)malloc(sizeof(Class1)*N);
    Class2* c2 = (Class2*)malloc(sizeof(Class2)*N);
    for (long i = 0; i < N; i++) c1[i] = Class1();
    for (long i = 0; i < N; i++) c2[i] = Class2();

    Рассказать ему про new[] / delete[]?

    runewalsh, 29 Ноября 2012

    Комментарии (32)
  6. C++ / Говнокод #12209

    +12

    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
    #include <stdio.h>
    #include <type_traits>
    #include <string>
    struct hack_t{};
    template<class TYPE>static hack_t operator&(const TYPE&,hack_t){return hack_t();}
    int main()
    {
      struct type{};
      std::string var="win";
      #define get_meta(var)[&]()->bool{hack_t unnamed;hack_t foo(var&unnamed);return std::is_function<decltype(foo)>::value;}()
      bool result_0=get_meta(var);
      bool result_1=get_meta(type);
      #undef get_meta
      printf("get_meta(var) == %s\n",result_0?"true":"false");
      printf("get_meta(type) == %s\n",result_1?"true":"false");
      return 0;
    }

    Код отличает переменную от типа.
    http://ideone.com/t7BBO4
    Сами знаете откуда.

    LispGovno, 27 Ноября 2012

    Комментарии (6)
  7. C++ / Говнокод #12208

    +10

    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
    //В mathc.hpp:
    typedef float import (float);
    
    //В неком cpp функция:
    float cm() {
            import calcFpu;
           //...
            float src = //...
            float res = calcFpu(src);
            return res;
    }
    
    //В mathc.cpp:
    void calcFpu(float){
    //...
    void calcSSE(float){
    //...

    Мои глаза... В перлы.
    http://ideone.com/RBAMyv

    LispGovno, 27 Ноября 2012

    Комментарии (14)
  8. C++ / Говнокод #12187

    +77

    1. 1
    delete[] Memory, leak; //Унарные операторы, такие уринарные.

    Былинный отказ.

    igumnovf, 23 Ноября 2012

    Комментарии (1)
  9. C++ / Говнокод #12180

    +15

    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
    #include <iostream>
    #include <functional>
     
    template<class Container, class F, class A>
    auto accumulate(Container c, F f, A acc) -> A
    {
      auto id = [](const A& a) -> const A& {return a;};
      typedef decltype(std::begin(c)) Iterator;
      const std::function<A(const Iterator& lst, const std::function<A(const A&)>&)> doIt = 
      [&](const Iterator& lst, const std::function<A(const A&)>& cont) -> A
      {
        if(lst==c.end())
          return cont(acc);
        else
        {
          auto conter=[&](const A& acc) -> A {return cont(f(*lst, acc));};
          return doIt(lst+1, conter);
        }
      };
      return doIt(std::begin(c), id);
    }
     
    int main() {
            std::cout<<accumulate({1,2,3,4}, std::plus<int>(), 0);
            return 0;
    }

    Похоже написал какой-то монадолог.
    http://ideone.com/y4Dm9z
    Пример использования accumulate сам накатал.
    Я побаловался с этим примером, чтобы разобраться и GCC ожидаемо упал:
    http://ideone.com/XWfuoP
    Я убежден, что эта функция должна была выглядеть как-то так:

    template<class Container, class F>
    accumulate(const Container& c, const F& f=std::plus<decltype(*(std::begin(c)))>(), const decltype(*(std::begin(c))) acc=decltype(*(std::begin(c)))()) -> decltype(*(std::begin(c)))
    {
    return std::accumulate(c.begin(), c.end(), acc, f);
    }
    //Вызов этой функции:
    accumulate({1,2,3,4});

    Ну и я погуглил на тему этого говнокода и нашел на функциональном языке похожий:
    let fold_right func acc list =
    let rec loop list cont = //сюда мы передаем текущую функцию континуации
    match list with
    |[] -> cont acc //а вот и наше ключевое вычисление.
    |head::tail -> loop tail (fun racc -> cont (func head racc))
    loop list (fun x -> x)

    LispGovno, 23 Ноября 2012

    Комментарии (39)
  10. C++ / Говнокод #12172

    +17

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    #include <iostream>
     
    int main() {
        std::cout << (2,0 * 2,5) << std::endl;   // 5
        std::cout << (0,625 * 6,4) << std::endl; // 4
        std::cout << (2,5 * 2,0) << std::endl;   // 5?
        return 0;
    }

    Почему в с++ умножение некоммутативно?

    http://ideone.com/Erp3uv

    bormand, 21 Ноября 2012

    Комментарии (44)