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

    +28

    1. 1
    QVector<double*>*** ElemBoundCond = tbc->getElementsBC();

    Abbath, 06 Декабря 2013

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

    +16

    1. 1
    2. 2
    3. 3
    function<future<int> (int)> f = [](int a){ cout << a << '\n'; return mreturn(a + 6); };
    int a = (mreturn(5) >>= f).get();
    cout << a;

    HaskellGovno, 06 Декабря 2013

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

    +13

    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
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    void Fetch_image::fetch(  ...
    						 , bool& image_repo_available)
    {
    	///...
    	if( smth)
    	{
    		/// ...
    		image_repo_available = false;/// 1
    		throw Exception( ...);/// 2
    	}
    	else
    	{
    		/// ...
    		image_repo_available = true;
    	}
    }
    
    bool Fetch_image::process(... ,bool& image_repo_available)
    {
    	/// ...
    	bool image_repo_available = false;
    	try
    	{
    		/// ...
    		fetch(..., image_repo_available);
    	}
    	catch(Exception const & ex)/// 3
    	{
    		log(...);
    		return false; /// 4
    	}
            catch (...)
            {
                    return false; /// 5
            }
    	/// ...
    }

    Параметры по ссылке
    ///1 устанавливаем значение
    ///2 бросаем исключение
    ///3 в catch ожидаем, что значение сохранится
    ///4 возврат из ф-ии
    И дальше по стеку еще 5 или 6 функций, которые принимают ссылку...


    Нахер так жить, котаны?

    blackhearted, 06 Декабря 2013

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

    +9

    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
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    // fib.h
    #pragma once
    using ull = unsigned long long;
    
    inline constexpr ull fib(size_t n, ull first, ull second) {
      return n == 0 ? first : fib(n - 1, second, first + second);
    }
    
    inline constexpr ull fib(size_t n) {
      return fib(n, 0, 1);
    }
    // fibs.h
    #pragma once
    #include "fib.h"
    #include <array>
    
    enum class fibs : ull {
    #define FIB(i, val) fib##i = val,
    #define COUNT(val) COUNT = val
    #include "fibs.inl"
    #undef COUNT
    #undef FIB
    };
    
    std::array<ull, static_cast<size_t>(fibs::COUNT)> const & fibs_values() {
      static std::array<ull, static_cast<size_t>(fibs::COUNT)> values = {
    #define FIB(i, val) val,
    #define COUNT(val)
    #include "fibs.inl"
    #undef COUNT
    #undef FIB
      };
      return values;
    }
    // main.cpp
    #include "fibs.h"
    #include <iostream>
    
    int main() {
      using namespace std;
      for (auto fib : fibs_values()) {
        cout << fib << "," << endl;
      }
      return 0;
    }
    // fibs.inl = gen.exe > fibs.inl
    // gen.cpp
    #include "fib.h"
    #include <iostream>
    
    int main() {
      using namespace std;
      size_t i;
      for (i = 0; i < 94; i++) {
        cout << "FIB(" << i << ", " << fib(i) << ")" << endl;
      }
      cout << "COUNT(" << i << ")";
      return 0;
    }

    LispGovno, 04 Декабря 2013

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

    +13

    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
    auto write =    [&buf](future<int> size) -> future<bool>    { 
      return streamW.write(size.get(), buf).then(
        [](future<int> op){
          return op.get() > 0; });    };   
    auto flse = [](future<int> op){
     return future::make_ready_future(false);};  auto copy = do_while(
        [&buf]() -> future<bool>    {
         return streamR.read(512, buf)    .then(
           [](future<int> op){ return (op.get() > 0) ? write : flse;});    });  
    
    ///////////////////////////////////////////////////////////////////////////
    
    int cnt = 0;   
    do  {  
    cnt = await streamR.read(512, buf);   
    if ( cnt == 0 ) break;   
    cnt = await streamW.write(cnt, buf);   
    } while (cnt > 0);

    Первое и второе угадайте что? Правильно, С++. В компиляторе студии и первое и второе будет. Первое уже даже есть. Ни первое ни второе не приняли в стандарт на сколько мне известно и надеюсь лобисты Майкрософт во главе с Саттером пойдут на ... подальше от крестов.

    www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3722.pdf

    LispGovno, 03 Декабря 2013

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

    +8

    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
    void print(int i) {printf("int: %d\n", i);}
    void print(double f) {printf("double: %f\n", f);}
    void print(char const * c) {printf("str: %s\n", c);}
    
    void WTF(...) {}
    
    template<typename... T>
    void print(T ... t) 
    {
      WTF((print(t), 0)...);
    }
    
    int main()
    {
      print(1, "hello", 3.0);
      return 0;
    }

    http://ideone.com/wddRC7

    LispGovno, 03 Декабря 2013

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

    +14

    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
    Node<maxCnt>   n[sizeY][sizeX], on;
    //...
    auto EachConvex = [](auto f, Body& b) 
    {
      for (auto g : b.g)
      {
        auto cp = Body::ConvexPtr(&b, g);
        auto bounds = cp.bounds();
        auto max = Rect(0, 0, sizeX - 1, sizeY - 1);
        auto out = max.intersect(bounds);
        auto b = max & bounds;
        for (auto x = b.left; x < b.right; ++i)
          for (auto y = b.top; x < b.bottom; ++i)
            f(n[y][x], cp);
        if (out)
          f(on, cp);      
      }
      return true;
    }

    LispGovno, 03 Декабря 2013

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

    +13

    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
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    typedef std::queue<Msg> Queue;    
        
    
    struct SharedQueue
    {
        private:
            Queue m_queue;
            boost::mutex m_mux;
            boost::condition_variable m_condvar;    
        private:
            struct is_empty
            {
                Queue& queue;
                is_empty( Queue& q):
                    queue(q)
                {
                }
    
                bool operator()() const
                {
                    return !queue.empty();
                }
            };
        public:
            void push(const Msg& msg)
            {
                boost::mutex::scoped_lock lock(m_mux);
                m_queue.push( msg);
                m_condvar.notify_one();
            }
    
            bool try_pop( Msg& msg, Kind kind)
            {
                boost::system_time const timeout=boost::get_system_time()+ boost::posix_time::milliseconds( 30000);
                boost::mutex::scoped_lock lock( m_mux);
                if ( m_condvar.timed_wait( lock, timeout, is_empty( m_queue)))
                {
                    if( !m_queue.empty() && m_queue.front().kind == kind)
                    {
                        msg = m_queue.front();
                        m_queue.pop();
                        return true;
                    }
                }
                return false;
            }
    };

    Это ж пипец, дорогие товарищи...

    blackhearted, 29 Ноября 2013

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

    +69

    1. 1
    2. 2
    #define BYTEMAX 0xFF 
    #define BYTEOVERFLOW (BYTEMAX+1)

    C++ вокруг. Интересует насколько это вменяемая практика?

    LispGovno, 26 Ноября 2013

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

    +13

    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
    //Сегодня QuestionGovno.
    //Допустим есть код:
    #include <iostream>
    using namespace std;
    class T{};
    struct M{M(T){}};
    struct G{G(T){}};
    
    int f(M){return 0;}
    bool f(G){return 0;}
    
    int main() {
    	bool a(f(T()));
    	return 0;
    }

    Казалось бы должна быть неоднозначность при компиляции, так как компилятор не знает какую перегрузку f бы выбрать.
    И как бы так оно и есть:
    http://ideone.com/o21NDg
    Логично? Логично.
    Но стандарт считает по другому:
    http://en.cppreference.com/w/cpp/language/overload_resolution
    Смотрите пункт:
    Best viable function
    F1 is determined to be a better function than F2 if implicit conversions for all arguments of F1 are not worse than the implicit conversions for all arguments of F2, and
    ...
    2) or. if not that, (only in context of non-class initialization by conversion), the standard conversion sequence from the return type of F1 to the type being initialized is better than the standard conversion sequence from the return type of F2

    Как мне повторить поведение, которое указано в стандарте?

    LispGovno, 22 Ноября 2013

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