Сегодня задали весёлый вопрос по 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!");
}
Комментариев нет:
Отправить комментарий