![]() |
Home | Libraries | People | FAQ | More |
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, 它將不能編譯)。