[英]Falsify true ↔ false
這個問題沒有實際用處! 我問這個只是因為我很好奇!
C++ 中有一種方法可以通過在某處寫入#define true false
來將 true 偽造為 false ,然后代碼中的任何地方true
都將被視為false
。 但我正在尋找一種同時將false
和false
true
true
:
#define true false
#define false true
這不起作用,並且嘗試“保存”原始true
也不起作用:
#define temptrue true
#define true false
#define false temptrue
你知道有什么辦法嗎?
也許是這樣的?
#define false static_cast<bool>(1)
#define true static_cast<bool>(0)
關於未定義的行為:
那些說它未定義的人可能指的是這個問題的答案:重新定義 C++ 關鍵字是否合法?
但是,如果您不使用標准 C++ 庫,則引用的限制不適用(感謝 Bathsheba 和 Martin York)。
16.5.4.1 [約束.概述]
子條款 16.5.4 描述了對使用 C++ 標准庫設施的 C++ 程序的限制。
...
16.5.4.3.2 [宏名稱] ...
翻譯單元不得#define
或#undef
名稱在詞法上與關鍵字相同,...
C++ 2020草案
嘗試#define
a C++ 關鍵字的行為未定義。 不要這樣做!
它不是那么漂亮,但是
static constexpr bool true_ = false;
static constexpr bool false_ = true;
可能是你能做的最好的。
這顯然沒有任何實際用途,也不是有效的 C++,但以下方法可以解決問題:
static constexpr auto fake_true = false;
static constexpr auto fake_false = true;
#define true fake_true
#define false fake_false
簡單地使用數字文字(例如 1 和 0)可能看起來更簡單,但在類型很重要的情況下會導致不同的語義(例如重載決議)。
使用constexpr
變量而不是改變true
和false
的行為。
static constexpr bool TRUE = false;
static constexpr bool FALSE = true;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.