Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

關於 optional<bool> 的說明

optional<bool> 在使用時需要特別小心和留意。

首先,它的功能類似於三態布爾類型(false,maybe,true) — 如 boost::tribool — 只有一點區別,即在三態布爾類型中,maybe 狀態代表了一個有效的值,而不是未初始化的 optional<bool> 的相應狀態。如果真的要用 optional<bool> 替代 tribool,你要非常小心謹慎。

其次,optional<> 提供了到 bool 的隱式轉換。該轉換表示了所含值是否為已初始化狀態。使用 optional<bool> 可能會由於這個到 bool 的隱式轉換而導致微妙的錯誤:

void foo ( bool v ) ;
void bar()
{
    optional<bool> v = try();

    // 下面將 'v' 的值傳遞給 foo():
foo(v); // 但是實際上,被傳遞的是初始化狀態
// 正確的寫法應該是:foo(*v).
}

隱式轉換只是轉為 bool, 不會對其進行整型類型的提升,所以它還是安全的(例如,如果 foo() 接受的是一個 int, 它將不能編譯)。


PrevUpHomeNext