Страницы

Поиск по вопросам

вторник, 26 ноября 2019 г.

Как сделать, чтобы (x==1 && x==2 && x==3 && x==4) возвращало true?


Сегодня задали весёлый вопрос по C++ - как добиться, чтобы 

(x==1 && x==2 && x==3 && x==4) 


имело значение true?
    


Ответы

Ответ 1



Навскидку - сразу два варианта: переопределить оператор == или оператор приведения. Оператор && сам по себе - вряд ли, только вкупе с каким-то из перечисленных... Вот, примерно так - https://ideone.com/XM7O1s: struct Cast { int i; operator int() { return i++; } Cast(int i):i(i){} }; struct Equl { bool operator==(int) const { return true; } }; Можно, конечно, извратиться - типа сравнение с конкретно 1,2,3 и 4 дает true, н это уже сути дела не меняет...

Ответ 2



Примерно так class X { public: bool operator==(int other) { return true; } } x = X();

Ответ 3



В рамках возможностей, предоставляемых С++, вопрос в таких условиях тривиален и неинтересен. Что уж там мелочиться template bool operator ==(const L &, const R &) { return true; } Всем, всегда и везде сплошное true... (Не всем, не всегда и не везде, конечно, но идея понятна.) А далее хоть struct {} x; хоть enum { x }; Вариант даже для С может выглядеть как static int i; #define x (++i)

Ответ 4



Еще вариант с перегрузкой operator== для типа, который не может сравниваться с int: #include #include template bool operator==(T&&, int) { return true; } int main() { std::string x; std::cout << (x==1 && x==2 && x==3 && x==4) ; }

Ответ 5



Вот такой вариант работает: int x = 0; #include #define x (++x) using namespace std; int main() { cout<<(x==1&&x==2&&x==3&&x==4)<

Ответ 6



Препроцессор: #define x true || 0 Пример

Ответ 7



Сегодня задал эту задачу своему другу, он, методом научного тыка, нашёл ещё одн странное решение: #include #define x 1,2,3,4 int main() { if (x == 1 && x == 2 && x == 3 && x == 4) puts("cheater!"); }

Комментариев нет:

Отправить комментарий