- 1
https://i.imgur.com/2GTA40l.png
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−10
https://i.imgur.com/2GTA40l.png
−9
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
−3
#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
Собственно, занесения в аналы ГК достоин весь этот класс целиком.
−7
/*
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
−5
class SNMPRemoteAgentSet
{
protected :
std::vector<SNMPRemoteAgent*> _agents;
}
void SNMPRemoteAgentSet::clear() {
while((int)_agents.size()) {
delete _agents[0];
_agents.erase(_agents.begin());
}
}
SNMPRemoteAgentSet::~SNMPRemoteAgentSet() {
clear();
}
Вот такой код нашёл в проекте. Таких говно-деструкторов в этом проекте ещё полно.
0
#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++ стиле.
Переделать бы ещё это под итераторы, чтобы двух обращений к мапе не было…
+2
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 и без него работали по разному.
+1
#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";+2
template <class F, class G>
auto operator*(F&& f, G&& g) -> decltype(auto) {
return [=](auto ...args) { return f(g(args...)); };
}
Композиция функций
−4
#include <iostream>
using namespace std;
int main()
{
bool s;
if (s == true) {
return true;
}
if (s == false) {
return false;
}
else {
return !true && !false;
}
}
Настоящие программисты пишут вот так!