EzoeRyou/cpp-intro

意味上のポインター: 不適切と思われる説明2点

k-satoda opened this issue · 1 comments

「意味上のポインター」(028-pointer-semantics.md) の説明に不適切と思われる箇所が
あったのでお知らせです。

・・・「まだ書きかけ」として公開されている状態なのでこういった指摘が
歓迎されるものか不安に思いながら書いてます。煩わしいようならそこらへんの
ポリシーなどを教えてもらうだけで閉じてもらってもかまわないです。
(指摘が歓迎されるのなら他のところも見たりしようかな、とも思ってます。)

  • c250d15#diff-d27600081f0d6802e8fd7ede213346bfR169

    わからない値の整数を読むことは推奨できない。書くことはできる。

    未初期化の int 型変数の値(不定値)を読むことは「推奨できない」とされた
    うえで、未初期化のポインタ型変数の値(不定値)をデリファレンスした場合を
    「未定義の挙動」であると説明されていますが、実際は int の不定値となる
    式を評価した場合の挙動も未定義なので不適切な対比になっていると思います。
    参照: https://timsong-cpp.github.io/cppwp/n4659/dcl.init#12

    ... If an indeterminate value is produced by an evaluation, the
    behavior is undefined except in the following cases:

    • If an indeterminate value of unsigned narrow character type or
      std::byte type ...
  • c250d15#diff-d27600081f0d6802e8fd7ede213346bfR230

    C++ではさらに歴史的な理由で、0もnullポインター値として扱う。

    ポインタの文脈で 0 をnullポインター値として扱う(ヌルポインタ定数と
    する)のはC言語も同じなので、「C++では」として直前の NULL の紹介と
    分けられているのは不適切だと思います。

1つ目は修正。
50afb5a

2つ目は違う。今は知らないが、昔のC言語では0はnullポインターの値だと規格上定められてはいなかった。