- 1
delete[] Memory, leak; //Унарные операторы, такие уринарные.
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+77
delete[] Memory, leak; //Унарные операторы, такие уринарные.
Былинный отказ.
+15
#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)
+17
#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
+16
//...
ret.value(_val != "" ? _val : "");
//...
+21
//Было:
int foo()// ;
{ ;
int a ;
float b ; //В правой части старые
typedef int testing ; //полезные комментарии
std::cout << "Ho-ho-ho" ;
a=0 ;
b=1.0f ;
if (a==b)// ;
{ ;
std::cout <<"Yet another caption";
std::cout <<"Hi-hi-hi" ;
bar() ;
;
} ;
using namespace std ;
for (int i =0;i<10;i++)// ;
{ ;
;
std::cout <<"Hello, world!" ;
std::cout <<"Yet another line" ;
} ;
return 0 ;
;
} ;
//Кто-то что-то решил поменять
//Стало:
int foo()// ;
{ ;
int a ;
float b ; //В правой части старые
typedef int testing ; //полезные комментарии
std::cout << "Ho-ho-ho" ;
a=0 ;
b=1.0f ;
if (a==b)// ;
{ ;
std::cout <<"Yet another caption";
std::cout <<"Hi-hi-hi" ;
bar() ;
;
} ;
double c;
//Слева комментарии требующие
//проверки. Wtf???Зачем здесь с???
using namespace std ;
for (int i =0;i<10;i++)// ;
{ ;
;
std::cout <<"Hello, world!" ;
std::cout <<"Yet another line" ;
} ;
return 6666 ;
;
} ;
//Быстро определили по линии из точек c
//запятой место в котором произошло изменение.
//Если согласились с ним восстанавливаем линию.
Бесплатная распределенная говносистема контроля версий. Git и SVN нервно курят в сторонке.
+23
typedef const AbstractParameter ConstAbstractParameter;
class Parameter: public ConstAbstractParameter{
GCC это не компилирует, но в 2008 ms vs компилируется без предупреждений. Я это как увидел, так сразу переписал на
class Parameter: public AbstractParameter{+9
class A
{
public:
A () : p (new SomeType)
{
assert ("It must be non-zero" && p);
}
~A ()
{
Box <SomeType> deleter (p);
p = 0;
}
private:
SomeType *p;
};
А вот и применение класса Box
+22
class ClassA
{
};
class ClassB : private ClassA
{
public:
ClassA& AsClassA()
{
return *this;
}
};
+22
template<class T>
class Box
{
private:
explicit Box(const Box&);
Box& operator = (const Box&);
public:
explicit Box()
: m_value(0)
{}
explicit Box(T* value)
: m_value(value)
{}
~Box()
{
std::auto_ptr <T> toDelete(m_value);
}
T* Release()
{
T* const result(m_value);
m_value = 0;
return result;
}
void Reset(T* value)
{
std::auto_ptr <T> toDelete(m_value);
m_value = value;
}
private:
T* m_value;
};
+24
#define TRUE (1)
#define FALSE (0)
#define internal protected:
#define external public:
#define declareSuper(superClass) protected: typedef superClass super
Оттуда.