@ R。Martinho Fernandesのこの回答 は、セーフブールイディオムがC++ 11で非推奨になっていることを示しています。
_explicit operator bool() const;
_
回答_§4 [conv] p3
_の標準引用によると:
いくつかの発明された一時変数
T
(§8.5)について、宣言_T t=e;
_が整形式の場合にのみ、式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
_)タイトルの私たちの仮定は正しいですか?潜在的な欠点を見逃していないことを願っています。
はい。これはtheの例です。暗黙的なユーザー定義の変換と明示的なユーザー定義の変換演算子のみが実際にあった問題の例です この問題のために発明されました そして、すべての安全なものをよりクリーンで論理的なものに置き換えます。