среда, 26 марта 2008 г.

fun code

Today I've found funny code somewhere in the big project. It looks like the following:

class T
{
public:
// ... some declarations
bool operator ==( T& t )
{
bool b = false;
if ( t == *this ) b = true;

return b;
}
}

2 коммент.:

Владимир Долженко комментирует...

куда забавней
Если стоит 3, то и пусть стоит:
if ($pay == 3){
$pay = 3;
}else{
$pay = $pay;
}

Pushkoff комментирует...

Этому коду до говнокода, как мне пешком до Майами (я счас в Харькове)

Допустим этот класс абстрактный и в нем есть другие операторы сравнения, операндами которых выступают классы наследники.
Вызывая оператор сравнения для базового класса мы не можем выбрать из кучи операторов сравнения нужный так как имеем только указатели на базовый класс. Этот оператор сравнения является общим, вызывая его мы определяем к какому классу относится this, и перевызывая оператор мы меняе местами неизвестный операнд с известным (это в строке c if ( t == *this ) ) так как класс скорее всего абстрактный то вызовется уже другой оператор сравнения...