Скобки нам не нужны
Труъ-хакеры, которые любят съесть еще французских булок и закоммитить что-нибудь жестокое на IOCCC, любят писать в коде что-нибудь похожее на:
Семантика этого (в случае, если f и b имеют тип int) очевидна. Но нельзя ли так написать код на C++, сохранив семантику, чтобы скобки можно было опустить?
UPD: Решено! Первым верный код, использующий перегрузку оператора || и возвращающий ссылку на интовое поле второго операнда либо на мусор, запостил в комментах
pritmick. Мой вариант отличается совсем чуть-чуть:
f || (b = 0);
Семантика этого (в случае, если f и b имеют тип int) очевидна. Но нельзя ли так написать код на C++, сохранив семантику, чтобы скобки можно было опустить?
UPD: Решено! Первым верный код, использующий перегрузку оператора || и возвращающий ссылку на интовое поле второго операнда либо на мусор, запостил в комментах
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; }
};
int var, dummy;
U(int val = 0) : var(val) {}
operator int () { return var; }
int& operator || (U& o) { return var ? o.var : dummy; }
};