среда, 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 комментария:

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

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

    ОтветитьУдалить