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

    +1

    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
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    namespace detail {
        template<entity_event_t Event>
        struct EventHasEntityStateConstructor {
            // Sanity check
            static_assert(static_cast<int32_t>(Event) >= 0
                          && static_cast<int32_t>(Event) < ENTITY_EVENTS_COUNT);
    
        private:
            struct TwoChar {
                char a, b;
            };
    
            template<typename T>
            constexpr static TwoChar _check(
                decltype(
                    T(std::declval<const entityState_t &>())
                )*
            );
    
            template<typename T>
            constexpr static char _check(...);
    
        public:
            constexpr inline static bool value = (sizeof(_check<EntityEvent<Event>>(nullptr)) == sizeof(TwoChar));
        };
    
        template<typename BusT, entity_event_t Event>
        bool defaultEntityEventPublisher(const BusT & bus, const entityState_t & eventEntity)
        {
            static_assert(EventHasEntityStateConstructor<Event>::value,
                          "defaultEntityEventFactory<Event>() instantiated for a custom\n"
                          "event that does not have a (const entityState_t & eventEntity) constructor.\n"
                          "This should not happen (you'll get a more obscured compiler error anyway)!");
            return bus.publishEmplace<EntityEvent<Event>>(eventEntity);
        }
    
        template<typename BusT, typename T, T... Is>
        constexpr std::array<EntityEventPublisherPtr<BusT>, sizeof...(Is)>
            createDefaultEntityEventFactories(std::integer_sequence<T, Is...>)
        {
            return {
                [](auto i) -> EntityEventPublisherPtr<BusT> {
                    if constexpr (EventHasEntityStateConstructor<static_cast<entity_event_t>(i.value)>::value) {
                        return &defaultEntityEventPublisher<BusT, static_cast<entity_event_t>(i.value)>;
                    } else {
                        return nullptr;
                    }
                }(std::integral_constant<T, Is>{})...
            };
        }
    }
    
    // An (event_number -> EntityState<event_number> 'publishing factory' function) mapping;
    // if event N could not be constructed from a single entityState_t reference
    // then this table would contain nullptr at the index N
    template<typename BusT>
    const std::array<EntityEventPublisherPtr<BusT>, ENTITY_EVENTS_COUNT> & getDefaultEntityEventsPublishers() noexcept
    {
        static auto factories = detail::createDefaultEntityEventFactories<BusT>(std::make_integer_sequence<int32_t, ENTITY_EVENTS_COUNT>());
        return factories;
    }
    
    template<typename BusT>
    EntityEventPublisherPtr<BusT> tryGetDefaultEntityEventPublisher(entity_event_t event) noexcept
    {
        auto eventNum = static_cast<int32_t>(event);
        if (eventNum >= 0 && eventNum < ENTITY_EVENTS_COUNT) {
            return getDefaultEntityEventsPublishers<BusT>()[eventNum];
        } else {
            return nullptr;
        }
    }

    PolinaAksenova, 21 Марта 2021

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

    −1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    enum class NodeFlags : int {
        None               = 0,
        Let                = 1 << 0,
    // ...
    }
    
    contextFlags &= ~flag;
    
    // error C2675: unary '~': 'NodeFlags' does not define this operator or a conversion to a type acceptable to the predefined operator

    Кому нужны такие гавно-компиляторы? которые даже не в состоянии привети четко прописанные типы?

    ASD_77, 20 Марта 2021

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

    0

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    metrics_key::metrics_key(std::initializer_list<std::string> const& il) {
      TRI_ASSERT(il.size() > 0);
      TRI_ASSERT(il.size() < 3);
      name = *il.begin();
      if (il.size() == 2) {
        labels = *(il.begin()+1);
      }
      _hash = std::hash<std::string>{}(name + labels);
    }

    просто гавно

    gnusmas, 18 Марта 2021

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

    0

    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
    // почему это гавно не будет работать?
    auto size = buffer.size() - 1;
    auto *ptr = new byte[size];
    for (auto i = size; i >= 0; i--)
    {
        ptr[i] = 0;
    }
    
    // a это гавно будет работать :)
    auto size = buffer.size() - 1;
    auto *ptr = new byte[size];
    for (int i = size; i >= 0; i--)
    {
        ptr[i] = 0;
    }

    почему это говно не будет работать?

    ASD_77, 17 Марта 2021

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

    0

    1. 1
    Как крестьяне говна поели

    This function is defined as the RtlSecureZeroMemory function (see WinBase.h). The implementation of RtlSecureZeroMemory is provided inline and can be used on any version of Windows (see WinNT.h.)

    Use this function instead of ZeroMemory when you want to ensure that your data will be overwritten promptly, as some C++ compilers can optimize a call to ZeroMemory by removing it entirely.

    Petro-san, 10 Марта 2021

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

    +2

    1. 1
    2. 2
    3. 3
    int i = 42;
    foo(i); //не компилируется
    foo(static_cast<int>(i)); //компилируется

    raMagPuJI, 05 Марта 2021

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

    0

    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
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    // -------------------------------------------
    // 2.2. binary calls
    // -------------------------------------------
    /*
        combination table:
    
          +-   | c a n
            ---|-------
             c | C A N
             a | A A N
             n | N N N
    
          *    | c a n
            ---|-------
             c | C A N
             a | A N N
             n | N N N
    
          /    | c a n
            ---|-------
             c | C N N
             a | A N N
             n | N N N
    
        argument:
          c : constant, as scalar, point, tensor, ect
          l : affine homogeneous expr argument: as field, field_indirect or field_expr_node::is_affine_homogeneous
          n : function, functor or ! field_expr_node::is_affine_homogeneous
        result:
          C : constant : this combination is not implemented here
          A,N : are implemented here
        rules:
          at least one of the two args is not of type "c"
          when c: c value is embeded in bind_first or bind_second
                  and the operation reduces to an unary one
          when a: if it is a field_convertible, it should be wrapped
                  in field_expr_v2_nonlinear_terminal_field
          when c: no wrapper is need
        implementation:
          The a and n cases are grouped, thanks to the wrapper_traits
          and it remains to cases :
            1) both args are  field_expr_v2_nonlinear or a function 
            2) one  arg  is a field_expr_v2_nonlinear or a function and the second argument is a constant
    */
    
    #define _RHEOLEF_make_field_expr_v2_nonlinear_binary(FUNCTION,FUNCTOR)	\
    template<class Expr1, class Expr2>						\
    inline										\
    typename									\
    std::enable_if<									\
         details::is_field_expr_v2_nonlinear_arg<Expr1>::value			\
      && details::is_field_expr_v2_nonlinear_arg<Expr2>::value			\
      && ! details::is_field_expr_v2_constant   <Expr1>::value			\
      && ! details::is_field_expr_v2_constant   <Expr2>::value			\
     ,details::field_expr_v2_nonlinear_node_binary<					\
        FUNCTOR									\
       ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type	\
       ,typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type 	\
      >										\
    >::type										\
    FUNCTION (const Expr1& expr1, const Expr2& expr2)				\
    {										\
      typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr1>::type wrap1_t; \
      typedef typename details::field_expr_v2_nonlinear_terminal_wrapper_traits<Expr2>::type wrap2_t; \
      return details::field_expr_v2_nonlinear_node_binary <FUNCTOR,wrap1_t,wrap2_t> \
    	(FUNCTOR(), wrap1_t(expr1), wrap2_t(expr2)); 				\
    }										\
    template<class Expr1, class Expr2>						\
    inline										\
    typename 									\
    std::enable_if<									\
         details::is_field_expr_v2_constant     <Expr1>::value			\
      && details::is_field_expr_v2_nonlinear_arg<Expr2>::value			\
      && ! details::is_field_expr_v2_constant   <Expr2>::value			\
     ,details::field_expr_v2_nonlinear_node_unary<					\
        details::binder_first<							\
          FUNCTOR									\
         ,typename details::field_promote_first_argument<				\
            Expr1

    MAKAKA, 25 Февраля 2021

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

    0

    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
    #include <iostream>
    #include <ctime>
    using namespace std;
    
    #define SIZE 200000000
    
    struct StackRazrivator {
    	int data[SIZE];
    };
    
    void razorvi() {
    	cout << "nachinau razrivat\n";
    	StackRazrivator r;
    }
    
    void razrivator() {
    	cout << "razrivator\n";
    	razorvi();
    }
    
    int main() {
        cout << "start" << endl;
    	razrivator();
    	return 0;
    }

    Что выведет программа, если скомпилировать без оптимизаций и почему?

    https://godbolt.org/z/75Yzer

    3_dar, 20 Февраля 2021

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

    −1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    void setAreaPreScale(double scale)
    {
      if(scale == 1)
        setFrameSize(initialFrameSize.first, initialFrameSize.second);
      else
      {
        double widthPart = (1 - initialFrameSize.first) * (1 - scale);
        double heightPart = (1 - initialFrameSize.second) * (1 - scale);
        setFrameSize(initialFrameSize.first + widthPart, initialFrameSize.second + heightPart);
      }
    }

    требуется сделать отложенное масштабирование картинки, сначала рисуется (и скейлится методом setAreaPreScale) рамка с областью, в которую будет замасштабировано, затем отдельной кнопкой будет масштабироваться. в методе происходит рассчёт размера в пикселях рамки прескейла по параметру scale (отношение будущего масштаба к текущему). initialFrameSize на самом деле maxFrameSize, но авторский код сохранён

    gladijos, 11 Февраля 2021

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

    0

    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
    // foo.h
    namespace Xru {
    struct Foo {
        Foo();
    };
    }
    
    // foo1.cpp
    #include <foo.h>
    using namespace Xru;
    Foo::Foo() {}
    
    // foo2.cpp
    #include <foo.h>
    namespace Xru {
    Foo::Foo() {}
    }

    Вы пишите как 1 или 2?
    До меня другой коллега доёбуецца, что нужно как 2.

    3_dar, 10 Февраля 2021

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