Image

Listens: ТТ-34 — [Бум! #10] Самураи

Category:

Скобки нам не нужны

Труъ-хакеры, которые любят съесть еще французских булок и закоммитить что-нибудь жестокое на IOCCC, любят писать в коде что-нибудь похожее на:

f || (b = 0);

Семантика этого (в случае, если f и b имеют тип int) очевидна. Но нельзя ли так написать код на C++, сохранив семантику, чтобы скобки можно было опустить?

UPD: Решено! Первым верный код, использующий перегрузку оператора || и возвращающий ссылку на интовое поле второго операнда либо на мусор, запостил в комментах Imagepritmick. Мой вариант отличается совсем чуть-чуть:

class U { public:
    int var, dummy;
    U(int val = 0) : var(val) {}
    operator int () { return var; }
    int& operator || (U& o) { return var ? o.var : dummy; }
};