Skip to content

Commit

Permalink
NULL: C++03 の規定について実際の規格と合致しない記述を修正
Browse files Browse the repository at this point in the history
下記コメントで挙げていた問題点の修正です。
a4d88a8#r86623360

また、 NULL の値が互換性維持のため整数定数式で維持されることについては
どれぐらいの実装が該当するのか不明な感じだったので、確認された実例を含む
記事への参照を追加しました。
  • Loading branch information
k-satoda committed Jan 7, 2023
1 parent 5df0bc4 commit 533c542
Showing 1 changed file with 5 additions and 2 deletions.
7 changes: 5 additions & 2 deletions reference/cstddef/null.md
Expand Up @@ -22,9 +22,12 @@
## 備考
C++03において、「ヌルポインタ定数」は「値が0の整数リテラル」と定義されていた。したがって、マクロ`NULL`の値として`0`や`0L`は規格に適合する定義だが、`(void*)0`はリテラルではなく式であるため不正である
C++03において、「ヌルポインタ定数」は「値が0になる整数定数式」と定義されていた。したがって、マクロ`NULL`の値として`0`や`0L`は規格に適合するが、`(void*)0`は整数定数式ではないため適合しない
C++11では、「ヌルポインタ定数」の定義に「[`std::nullptr_t`](/reference/cstddef/nullptr_t.md)型のprvalue」が追加されたため、`nullptr`も規格に適合する。しかし、`NULL`の値の型が変わるとコードの互換性を損なうことから、当面の間 `NULL` の定義は整数リテラルであると思われる。C++11以降は`NULL`ではなく[`nullptr`](/lang/cpp11/nullptr.md)を使用するとよい。
C++11では、「ヌルポインタ定数」の定義に「[`std::nullptr_t`](/reference/cstddef/nullptr_t.md)型のprvalue」が追加されたため、`nullptr`も規格に適合する。しかし、`NULL`の値の型が変わるとコードの互換性を損なうことから、当面の間`NULL`の値は整数定数式であると思われる。C++11以降は`NULL`ではなく[`nullptr`](/lang/cpp11/nullptr.md)を使用するとよい。
## 関連項目
- [C++11 `nullptr`](/lang/cpp11/nullptr.md)
## 参照
- [Does any major C++ implementation actually define `NULL` as `nullptr`? - Stack Overflow](https://stackoverflow.com/questions/61699775/does-any-major-c-implementation-actually-define-null-as-nullptr)

0 comments on commit 533c542

Please sign in to comment.