I+= ++ i未定義の動作はC ++ 0xですか?
-
30-09-2019 - |
質問
私はそれが言ったと私が見つけた説明に非常に確信しています i = ++i
未定義ではありません C ++ 0xに関する限り、 i += ++i
明確に定義されているかどうか。テイカーはいますか?
解決
それが作る理由 i = ++i
明確に定義されたものは、それを証明するために等しく使用できます i += ++i
また、明確に定義する必要があります。
i += ++i
に相当します i += (i += 1)
そして、新しいシーケンスルールでは、の値計算の前に割り当てが行われることが必要です i += 1
サブエクスペッション。
これは、式の結果を意味します i += ++i
と同じでなければなりません i = 2 * i + 1
.
編集: 結局のところ、行動は未定義であるため、私は答えを修正しなければなりません。
の動作 i += ++i
サブ発現の価値計算は未定義です i
(左側の引数)および ++i
互いに関連して順応していないので、そのうちの1つにはオブジェクトの更新が含まれています i
.
これは表現の問題ではありません i = ++i
, 、そこにあるからです i
左側では、lvalue-to-balueからバリューへの変換を受けません。 i += ++i
場合。
サイドノート:深刻なプロジェクトでそのようなコードを書かないでください。シーケンスルールを正確に知っていることに依存しすぎており、シーケンスルールを適切に理解していない、637博士の結果であるルールの変更に気付いていないか、重要なものを逃してつまずいている人がたくさんいるでしょう。問題の表現の側面(この答えの最初の改訂を作成するときに私に起こったように)。
所属していません StackOverflow