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

    −9

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    BOOL ShaderElement::equal(ShaderElement* S)
    {
        if (nullptr == S && nullptr == this)
            return TRUE;
        if (nullptr == S || nullptr == this)
            return FALSE;
        return equal(*S);
    }

    https://www.linux.org.ru/forum/development/14512625

    Elvenfighter, 05 Октября 2018

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

    −3

    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
    #define m_from(format)			\
    char buff[128];					\
    sprintf(buff, format, value);	\
    data_ = std::string(buff);
    
    inline void fromShort(short value)
    {
        m_from("%i");
    }
    inline void fromInt(int value)
    {
        m_from("%i");
    }
    inline void fromLong(long value)
    {
        m_from("%li");
    }
    inline void fromFloat(float value)
    {
        m_from("%f");
    }
    inline void fromDouble(double value)
    {
        m_from("%f");
    }

    https://github.com/FlightBlaze/Newtoo/blob/master/modules/misc/USVString.h

    Собственно, занесения в аналы ГК достоин весь этот класс целиком.

    gost, 01 Октября 2018

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

    −7

    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
    /*
    Newtoo — разработка полноценного браузерного движка с нуля в 2018?
    Так уж получилось, что в мире есть всего 4 популярных браузерных движка,
    которые настолько сложны, что сами разработчики не знают и половины их
    кодовой базы, и настолько продвинутые по технологиям, что начать их догонять —
    пустая трата времени. 
    
    А так ли это на самом деле? Мой проект создан, чтобы повторить подвиги
    современных браузерных движков и проверить, насколько ли реально создать
    достойную альтернативу крупным проектам, история которых начинается с
    девяностых годов. Мой новый движок создается с нуля, а значит его история
    начинается — сегодня.
    ...
    Те ошибки, которые были допущены на начальных стадиях разработки
    остаются в проекте до конца. Самый яркий пример этому — умные
    указатели в C++ — это еще более сложный синтаксис, большой оверхед
    при работе, создании и удалении умных указателей. Кроме того, есть
    очень много типов умных указателей и нужно знать, какой когда использовать,
    ведь у каждого есть свои сюрпризы ньюансы. Посмотрите на этот файл из
    WebKit. Когда видишь такой код, синтаксис умных указателей, пытаешься
    успокоится и дышать ровно, но такого рода код — это весь вебкит с ног до
    головы. В моем движке нет таких недостатков.
    */
    
    Node* NodeListControlled::insertAt(unsigned long index, Node* child)
    {
        // mControl == vector<Node*>
        mControl.insert(mControl.begin() + index, child);
    
        return child;
    }

    Дело Попова, Бабушкина и иже с ними живёт!

    У умных указателей оверхед большой, а вот List со вставкой за O(n) — это не недостаток, это фича.
    А ещё там NamedNodeMap с тем же линейным поиском и практически полное игнорирование
    передачи по ссылке — компилятор умный, авось, заоптимизирует как-нибудь.

    https://sohabr.net/habr/post/424881/
    https://github.com/FlightBlaze/Newtoo

    gost, 01 Октября 2018

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

    −5

    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
    class SNMPRemoteAgentSet
    {
    protected :
    	std::vector<SNMPRemoteAgent*> _agents;
    }
    
    void SNMPRemoteAgentSet::clear() {
    	while((int)_agents.size()) {
    		delete _agents[0];
    		_agents.erase(_agents.begin());
    	}
    }
    
    SNMPRemoteAgentSet::~SNMPRemoteAgentSet() {
    	clear();
    }

    Вот такой код нашёл в проекте. Таких говно-деструкторов в этом проекте ещё полно.

    SuperCellSky, 01 Октября 2018

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

    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
    #include <iostream>
    #include <algorithm>
    #include <functional>
    #include <map>
    #include <string>
    
    int main()
    {
        using namespace std::placeholders;
    
        std::map<std::string, int> karta;
        std::vector<std::string> goroda{ "foo", "bar", "foo" };
    
        std::for_each(goroda.begin(), goroda.end(), std::bind(
            static_cast<
                std::pair<decltype(karta)::iterator, bool>
                (decltype(karta)::*)(const decltype(karta)::key_type&, decltype(karta)::mapped_type&&)>
                    (&decltype(karta)::insert_or_assign),
            std::ref(karta),
            _1,
            std::bind(
                std::plus<decltype(karta)::mapped_type>(),
                1,
                std::bind(
                    static_cast<decltype(karta)::mapped_type&(decltype(karta)::*)(const decltype(karta)::key_type &)>
                    (&decltype(karta)::operator[]),
                    std::ref(karta),
                    _1))
        ));
        std::cout << "foo: " << karta["foo"] << "\nbar: " << karta["bar"] << '\n';
        
        return EXIT_SUCCESS;
    }

    #24802, переписанный в функциональном modern C++ стиле.
    Переделать бы ещё это под итераторы, чтобы двух обращений к мапе не было…

    gost, 24 Сентября 2018

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

    +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
    struct A { 
      virtual int transmogrify();
    };
     
    struct B : A {
      int transmogrify() override { new(this) A; return 2; }
    };
     
    int A::transmogrify() { new(this) B; return 1; }
     
    static_assert(sizeof(B) == sizeof(A));
    
    int main() {
      A i;
      int n = i.transmogrify();
      // int m = i.transmogrify(); // undefined behavior
      int m = std::launder(&i)->transmogrify(); // OK
      assert(m + n == 3);
    }

    Yo dawg, we heard you like kostyli, so we put our kostyli into your kostyli, so that you can use kostyli to support our kostyli!

    https://en.cppreference.com/w/cpp/utility/launder

    А если серьезно, мне еще не удалось соорудить пример, чтоб код с std::launder и без него работали по разному.

    Elvenfighter, 24 Сентября 2018

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

    +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
    #include <map>
    #include <stdio.h>
    #include <vector>
    using namespace std;
     
    int main() {
       map<string, int> karta;
       for (auto pituh : vector<string> {"foo", "bar", "foo"}) {
        	karta[pituh]++;
       }
       printf("foo: %d\nbar: %d\n", karta["foo"], karta["bar"]);
       return 0;
    }

    <?php

    $karta = [];
    foreach (["foo", "bar", "foo"] as $pituh) {
    if (!isset($karta[$pituh])) {
    $karta[$pituh] = 0;
    }
    $karta[$pituh]++;
    }
    echo "foo: {$karta['foo']}\nbar: {$karta['bar']}\n";


    Поэтому за что я?

    guestinxo, 24 Сентября 2018

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

    +2

    1. 1
    2. 2
    3. 3
    4. 4
    template <class F, class G>
    auto operator*(F&& f, G&& g) -> decltype(auto) {
    	return [=](auto ...args) { return f(g(args...)); };
    }

    Композиция функций

    IBets, 21 Сентября 2018

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

    −4

    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
    #include <iostream>
    using namespace std;
    int main()
    {	
           bool s;
    	if (s == true) {
    		return true;
    	}
    	if (s == false) {
    		return false;
    	}
    	else {
    		return !true && !false;
    	}
    }

    Настоящие программисты пишут вот так!

    Verenick, 19 Сентября 2018

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

    −3

    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 "pch.h"
    #include <iostream>
    #include <math.h>
    
    using namespace std;
    
    int main()
    {
    	setlocale(LC_ALL, "rus");
    	int a,b,c;
    	double X1, X2;
    	cout << "Введите число a:" << endl;
    	cin >> a;
    	cout << "Введите число b:" << endl;
    	cin >> b;
    	cout << "Введите число c:" << endl;
    	cin >> c;
    	cout << "Получилось выражение:\n" <<a<<"x^2+"<<b<<"x+"<< c <<"=0"<<endl;
    	cout << "Дискриминант равен:\nD=b^2*4*a*c="<< (b*b)*4*a*c << endl;
    	X1 = (-b + abs(b*b))/2*a;
    	X2 = (-b - abs(b*b))/2*a;
    	cout<<"Корни уравнения равны:"<<endl;
    	cout << "X1=" << X1 << endl;
    	cout << "X2=" << X2 << endl;
    }

    Прога для нахождения корней квадратного уравнения. (Я просто новичок которому нехер делать).

    MaRLiN, 18 Сентября 2018

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