Mikhailo Asked:2020-01-26 02:11:17 +0000 UTC2020-01-26 02:11:17 +0000 UTC 2020-01-26 02:11:17 +0000 UTC 我怎样才能使 (x==1 && x==2 && x==3 && x==4) 返回真? 772 今天问了一个有趣的 C++ 问题——如何实现 (x==1 && x==2 && x==3 && x==4) 有关系true吗? c++ 9 个回答 Voted Andrio Skur 2020-01-26T02:15:25Z2020-01-26T02:15:25Z 或多或少像这样 class X { public: bool operator==(int other) { return true; } } x = X(); Best Answer Harry 2020-01-26T02:15:24Z2020-01-26T02:15:24Z 副手 - 一次有两个选项:重新定义运算符==或强制转换运算符。运营商&&本身不太可能,只能与列出的一些...... 在这里,像这样 - 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,但这并没有改变事情的本质...... AnT stands with Russia 2020-01-26T05:50:34Z2020-01-26T05:50:34Z 在 C++ 提供的限制范围内,这种情况下的问题是微不足道且无趣的。 有什么好开玩笑的 template <typename L, typename R> bool operator ==(const L &, const R &) { return true; } 对每个人,总是和无处不在true...(当然,不是对每个人,不是总是,也不是无处不在,但这个想法很清楚。) 然后至少 struct {} x; 尽管 enum { x }; 即使是 C 的变体也可能看起来像 static int i; #define x (++i) Croessmah stands with Russia 2020-01-26T03:03:59Z2020-01-26T03:03:59Z 另一种选择是为无法与 int 比较的类型重载 operator==: #include <iostream> #include <string> template<typename T> bool operator==(T&&, int) { return true; } int main() { std::string x; std::cout << (x==1 && x==2 && x==3 && x==4) ; } user245150 2020-01-26T16:56:15Z2020-01-26T16:56:15Z 这是一个有效的选项: int x = 0; #include <iostream> #define x (++x) using namespace std; int main() { cout<<(x==1&&x==2&&x==3&&x==4)<<endl; return 0; } Egor 2020-09-18T22:04:18Z2020-09-18T22:04:18Z 今天问朋友这个问题,他用科学戳的方法,又找到了一个奇怪的解法: #include <cstdio> #define x 1,2,3,4 int main() { if (x == 1 && x == 2 && x == 3 && x == 4) puts("cheater!"); } yrHeTateJlb 2020-01-26T15:31:44Z2020-01-26T15:31:44Z 预处理器: #define x true || 0 例子 TigerTV.ru 2022-01-05T10:04:17Z2022-01-05T10:04:17Z #define x 1 | 0 #define x 1 | 1 #define x 1 ^ 0 ТарасПрогер 2022-09-07T17:08:58Z2022-09-07T17:08:58Z auto a = [mb{ 0 }]()mutable{ return ++mb; }; #define x a() int main() { if (x == 1 && x == 2 && x == 3 && x == 4) cout << "wow!" << endl; } 您可以制作一个 lambda,它每次返回一个多 1 的数字,然后通过定义我们模拟对这个 lambda 的调用。
或多或少像这样
副手 - 一次有两个选项:重新定义运算符
==或强制转换运算符。运营商&&本身不太可能,只能与列出的一些......在这里,像这样 - https://ideone.com/XM7O1s:
当然,您可以变态-例如与专门比较 1,2,3 和 4 给出
true,但这并没有改变事情的本质......在 C++ 提供的限制范围内,这种情况下的问题是微不足道且无趣的。
有什么好开玩笑的
对每个人,总是和无处不在
true...(当然,不是对每个人,不是总是,也不是无处不在,但这个想法很清楚。)然后至少
尽管
即使是 C 的变体也可能看起来像
另一种选择是为无法与 int 比较的类型重载 operator==:
这是一个有效的选项:
今天问朋友这个问题,他用科学戳的方法,又找到了一个奇怪的解法:
预处理器:
例子
您可以制作一个 lambda,它每次返回一个多 1 的数字,然后通过定义我们模拟对这个 lambda 的调用。