This answer of @R. Martinho Fernandes所示,該安全-布爾成語apperently棄用C++ 11,因爲它可以通過一個簡單的在C++ 11中,安全布爾成語是否過時?
explicit operator bool() const;
根據在應答§4 [conv] p3
標準報價替換:
當且僅當聲明
T t=e;
格式良好時,對於某些發明的臨時變量t
(第8.5節),表達式e可隱式轉換爲類型T
。某些語言結構要求將表達式轉換爲布爾值。出現在這樣的背景下的表達式e
被說成是上下文轉換到和bool
是公形成當且僅當該聲明bool t(e);
是公形成,對於一些發明臨時變量t(第8.5節)。
突出顯示的部分清楚地顯示了「隱式顯式強制轉換」(在標準中稱爲「上下文轉換」)爲@R。馬蒂奧說的。
的 「某些語言結構」,需要的是 「隱顯式類型轉換」 似乎是以下幾點:
if
,while
,for
(§6.4 [stmt.select] p4
)- 二元邏輯運算符
&&
和||
(§5.14 [expr.log.and/or] p1
爲兩者) - 邏輯否定運算符
!
(§5.3.1 [expr.unary.op] p9
) - 條件操作
?:
(§5.14 [expr.cond] p1
) static_assert
(§7 [dcl.dcl] p4
)noexcept
(§15.4 [except.spec] p2
)
是我們在標題假設是正確的?我希望我們不會忽略任何潛在的缺點。
+1:我喜歡這種類型的問題,教給我關於即將到來的標準的新東西。 – 2011-06-25 18:57:36
您知道標準中缺少隱式顯式轉換...從另一個「運算符bool」中返回某些東西。例如,如果我有一個叫做p的'shared_ptr'成員並且有這個方法:'operator bool()const {return p; }',它無法編譯。這是愚蠢的國際海事組織。 – David 2016-03-02 18:56:49