在C++中有三個值布爾變量的最佳方式是什麼?未在C++中設置布爾值
我想有字段設置爲true
,false
或根本沒有在我的數組中設置。
如果我宣佈他們這樣說:
t[0] = true;
t[1] = false;
t[2] = NULL;
當我測試的條件,我得到:
t[2]
是false
在C++中有三個值布爾變量的最佳方式是什麼?未在C++中設置布爾值
我想有字段設置爲true
,false
或根本沒有在我的數組中設置。
如果我宣佈他們這樣說:
t[0] = true;
t[1] = false;
t[2] = NULL;
當我測試的條件,我得到:
t[2]
是false
你可能想看看boost.tribool:http://www.boost.org/doc/libs/1_60_0/doc/html/tribool.html
你可以使用boost ::可選
http://www.boost.org/doc/libs/1_60_0/libs/optional/doc/html/index.html
boost::optional<bool> myBooleanVariable;
我同意tribool可以更好,如果你不需要未初始化值是NULL。在比較可選和tribool時,文檔說:
首先,它在功能上類似於三態布爾(false,也許是true),如boost :: tribool-除了在三態布爾中,狀態表示一個有效值,與未初始化的可選狀態的對應狀態不同。應該仔細考慮是否真的需要一個可選的而不是tribool。
考慮使用std::experimental::optional<bool>
(如果你的C++標準庫有它),或boost::optional<bool>
(www.boost.org)。
我相信std::optional
是C++ 17的候選人,所以如果你採用上述方法之一,那麼你對C++ 17的重構工作應該是最小的。
如果你不喜歡在 「適當的」 C++標準庫使用的東西都是不(沒?),然後再考慮根據各地std::unique_ptr<bool>
一個std::pair<bool, bool>
東西
一個很好的老式enum
有3個值。
我通常會做的事:
t[0] = true;
t[1] = false;
t[2] = -1;
或者,如果你只需要3個狀態,但也許會更喜歡在某些時候,一個enum
是偉大的:
enum STATES
{
NULL_STATE = -1, // you can manually specify -1 to give it a special case value
FALSE, // will be equal to 0
TRUE // will be equal to 1
};
不管是什麼儘管如此,0/false
是if()
語句中返回false
的唯一東西。-1
和true
都返回true
。
您可能需要使用一個開關這樣的處理3+狀態:
switch (var) // may need to cast: (int)var
{
case 1:
case 0:
case -1:
};
另外,如果你想堅持的if語句塊中,你可以做這樣的事情:
if (var == -1) // or (var == NULL_STATE)
{}
else if (var) // true condition
{}
else // false
{}
創建一個枚舉值你的三個值 – Martin
boolen或boolean? – Nik