簡體   English   中英

偽造真 ↔ 假

[英]Falsify true ↔ false

這個問題沒有實際用處! 我問這個只是因為我很好奇!

C++ 中有一種方法可以通過在某處寫入#define true false來將 true 偽造為 false ,然后代碼中的任何地方true都將被視為false 但我正在尋找一種同時將falsefalse 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變量而不是改變truefalse的行為。

static constexpr bool TRUE = false;
static constexpr bool FALSE = true;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM