2016-03-03 96 views
5

在C++中有三個值布爾變量的最佳方式是什麼?未在C++中設置布爾值

我想有字段設置爲true,false或根本沒有在我的數組中設置。

如果我宣佈他們這樣說:

t[0] = true; 
t[1] = false; 
t[2] = NULL; 

當我測試的條件,我得到:

t[2]false

+3

創建一個枚舉值你的三個值 – Martin

+0

boolen或boolean? – Nik

回答

2

你可以使用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。

來源:http://www.boost.org/doc/libs/1_60_0/libs/optional/doc/html/boost_optional/a_note_about_optional_bool_.html

3

考慮使用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>

    1. 東西

    2. 一個很好的老式enum有3個值。

    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/falseif()語句中返回false的唯一東西。-1true都返回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 
    {}