条件文でのポインタ評価
条件文内でポインタを評価するとき、式 if (ポインタ) が十分であるかどうか疑問に思うかもしれません。または if (pointer != NULL) が必要な場合。
Nullポインター トラップ
従来のアプローチでは、if (pointer != NULL) を使用して、ポインターが null ポインター値 (NULL) と等しくないかどうかを明示的にチェックします。ただし、このアプローチは、NULL が定義されており、プラットフォームやプログラミング言語によって異なる可能性がある特定の値を持っているという前提に依存しています。
暗黙的なブール変換
C 11 では、条件文でのポインター評価を簡素化するメカニズムが導入されました。 null ポインターは暗黙的にブール値 false に変換され、null 以外のポインターは true に変換されます。これは、ポインタが std::nullptr_t 型でない限り、式 if (pointer) は if (pointer != NULL) と機能的に同等であることを意味します。
ブール変換に関するセクション
C 11 標準によると、ブール値に関するセクション変換:
"算術演算の prvalue、スコープなし列挙、ポインター、またはメンバー型へのポインターは、bool 型の prvalue に変換できます。ゼロ値、null ポインター値、または null メンバー ポインター値は、次のように変換されます。 false; 他の値は次のように変換されます。 true."
結論
C 11 以降では、ポインタかどうかを確認するために if (pointer != NULL) の代わりに if (pointer) を安全に使用できます。はヌルではありません。ただし、std::nullptr_t を使用している場合は、正しい評価を確実にするために、明示的な比較 if (pointer != nullptr) を使用する必要があります。
以上が「if (ポインタ)」だけで十分ですか?条件文でのポインタ評価の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。