質問

私はそれが言ったと私が見つけた説明に非常に確信しています 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博士の結果であるルールの変更に気付いていないか、重要なものを逃してつまずいている人がたくさんいるでしょう。問題の表現の側面(この答えの最初の改訂を作成するときに私に起こったように)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top