
キャストなしの明示的な演算子 bool
bool への明示的な変換を持つクラスを設計するとき、明示的なキャストなしでブール値としてどこで使用できるのか疑問に思うかもしれません。 .
bool へのコンテキスト変換
C 標準では、値を「コンテキストに従って bool に変換」できる特定のシナリオを定義しています。これらの状況は、次の 4 つの主なカテゴリに分類されます:
1.ステートメント:
- if (t) /* ステートメント */;
- for (; t;) /* ステートメント */;
- while ( t) /* ステートメント */;
- do { /* block */ } while (t);
2.式:
- !t
- t && t2
- t || t2
- t ? "true" : "false"
3.コンパイル時テスト:
- static_assert(t);
- noExcept(t)
- explicit(t)
- if constexpr (t)
4.アルゴリズムと概念:
- NullablePointer T
- std::remove_if(...)
- std::sort(...)
定数変換演算子と非定数演算子に関する注意事項
定数変換演算子と非定数変換演算子の組み合わせは混乱を招く可能性があることに注意してください。詳細については、以下の関連質問を参照してください:
- [コンテキスト変換で明示的な bool() 変換が行われないのはなぜですか?](https://stackoverflow.com/questions/5580156/why- doesnt-explicit-bool-conversion-happen-in-contextual-conversion)
- [明示的な演算子 bool が期待どおりに機能しないのはなぜですか?](https://stackoverflow.com/questions/26578447/why) -明示的な演算子ブールを実行すると、期待どおりに効果がありません)
以上がC で明示的な `operator bool` がキャストなしで機能するのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。