私はあちこちから、stackoverflow や他の Web サイトから、式の評価が演算子の優先順位と演算子の結合性に依存していることを読みました。問題は、ある有名な Web サイトの次の行を読んだことです。優先順位と結合性は、評価の順序とは無関係です。わかりましたが、教育サイトで次の行を読みました。式のデータ型と値は、オペランドのデータ型と、演算子の優先順位と結合性によって決定される演算子の評価順序に依存します。
わかりました、私は混乱しています。コンパイラーは、最適化のために同じ優先順位の演算子を異なる順序で評価できることを知っているので、評価が行われる順序で動作は未定義です。つまり、式全体を変更でき、副作用がまったくない場合でも、副作用が 1 つしかない場合でも、結果は同じになります。それとも私が間違っていますか?私が正しければ、ほとんどの場合、評価の順序が定義されていない場合、演算子の結合性を定義するのはなぜですか。代入チェーン、論理短絡演算子、およびその他の場合を除きます。
つまり、評価の順序は結合性に依存します。もしそうなら、あなたはどのように説明できますか?結合性に依存していない場合、そもそも結合性を定義するのはなぜですか。それは、評価フェーズではなく、解析フェーズのためだけですか? 結合性が役立つと私が見た唯一の場所は、三項演算子の場合です。また、関数の引数の評価順序が定義されていないため、演算子のオーバーロードに結合性が適用されないのはなぜですか。