演算はとがヌル以外の生ポインタptr != nullptr
で正しく定義されていますか? C++標準からの引用は大歓迎です。演算子がNULLでない生ポインタとnullptrの間にありません
答えて
このような比較はうまく行われますが、結果は不明です。オブジェクトへのポインタを比較
[expr.rel]/3以下のように定義される:
- 二つのポインタが同じ配列の異なる要素に、またはそのサブオブジェクトを指している場合、を指すポインタ高い下付き文字を持つ要素はより大きい。
- 1つのポインタが配列の要素またはそのサブオブジェクトを指し、別のポインタが配列の最後の要素を1つ指す場合、後者のポインタはより大きい値を比較します。
- 2つのポインタが同じオブジェクトの異なる非静的データメンバーまたはそのようなメンバーのサブオブジェクトを指している場合、後で宣言されたメンバーへのポインタは、2つのメンバーが同じアクセス制御を持つ11)、そのクラスは組合ではない。
[expr.rel]/4二つのオペランド
p
とq
は(5.10)に等しい比較する場合、p<=q
及びp>=q
両方がtrue
p<q
ととp>q
両方を収率はfalse
をもたらします。そうでなければ、ポインタp
ポインタq
、p>=q
、p>q
、q<=p
超えるとを比較し、そしてq<p
すべてtrue
とp<=q
、p<q
、q>=p
、及びq>p
全てをもたらす場合false
をもたらします。それ以外の場合は、各演算子の結果は指定されません。
ヌルポインタは[expr.rel]/3の三節のいずれにも該当しない、そしてそれは、よりも非NULLポインタ未満のどちらを比較します。この場合は、[expr.rel]/4の "otherwise"節に該当します。
あなたは完全にp4を見逃しました。 –
@ T.C。私のC++ 14のp4には何も関係ありません。 C++ 17に新しいものがありますか? –
"そうでなければ、各演算子の結果は未定義です。" –
- 1. なぜC++には〜=と!=演算子がありませんか?
- 2. ポインタ間の演算子オーバーロード
- 3. ポインタ間のキャスト演算子
- 4. 共有ポインタ[]演算子と++演算子
- 5. 間接演算子とポインタ配列
- 6. FQLに "NOT NULL"型の演算子がありますか?
- 7. '00'演算子の後にオペランドがありません
- 8. プリプロセッサ:トークンの前に2進演算子がありません
- 9. ユニークなインデックスで作業していない演算子にありません
- 10. **演算子で計算できないBigDecimalがあります
- 11. 構文エラー(クエリ式で演算子がありません)
- 12. 正規表現では演算子がありません
- 13. アトミックベクトルに$演算子がありません
- 14. ##演算子には何がありません
- 15. 条件演算子(3進演算子)を使用するNullpointer例外(else演算子はありません)
- 16. 構文エラー(演算子がありませんが)
- 17. 安全なboolイディオムと明示的な演算子boolとの間の互換性がありません
- 18. クエリ式の構文エラー(演算子がありません)
- 19. エラー:演算子[]の一致がありません
- 20. クエリ合計式vb netの演算子がありません
- 21. regexの演算子がありません
- 22. 演算子[]の一致がありません。C++
- 23. バイナリ演算子 "<"のオペランドタイプが正しくありません
- 24. vba sql文のエラー "演算子がありません"
- 25. MySQLのIN演算子と=演算子の間にパフォーマンスの違いはありますか?
- 26. 構文エラークエリ式内(演算子がありません) - MS-アクセス
- 27. オペランドがありません「L」演算子
- 28. 構文エラー(演算子がありません)
- 29. 三項演算子に偽のオプションはありません
- 30. 算術演算と文字列連結の間にJavaの '+'演算子がありますか?
これらは、不特定の値を生じる。 –