式と優先順位の例

以下の式では、小括弧は、コンパイラーがオペランドや演算子をグループ化する方法を明示的に示します。

total = (4 + (5 * 3));
total = (((8 * 5) / 10) / 3);
total = (10 + (5/3));

これらの式に小括弧がない場合、 小括弧によって指示されるのと同じ方法で、オペランドと演算子がグループ化されます。 例えば、次の式は同じ出力を作成します。

total = (4+(5*3));
total = 4+5*3;

結合属性と可換属性の両方がある演算子とオペランドをグループ化する順序は規定されていないので、 次の式で、コンパイラーはオペランドと演算子をグループ化します。

total = price + prov_tax +
city_tax;

例えば、次のような方法が (小括弧で示されているように) 可能です。

total = (price + (prov_tax + city_tax));
total = ((price + prov_tax) + city_tax);
total = ((price + city_tax) + prov_tax);

ある順序付けがオーバーフローを引き起こし、他の順序付けがオーバーフローを引き起こさない という場合を除き、オペランドおよび演算子のグループ化が、結果に影響を与えることはありません。 例えば、price = 32767prov_tax = -42、および city_tax = 32767、 ならびにこれら 3 つの変数すべてが整数として宣言されていた場合、3 番目のステートメント total = ((price + city_tax) + prov_tax) は、整数オーバーフローを引き起こすけれども、 他のステートメントは引き起こしません。

中間値が丸められるため、浮動小数点演算子の異なるグループ化は、異なる結果になる場合があります。

ある式では、オペランドや演算子のグループ化によっては、結果に影響を与えます。 例えば、次の式では、各関数呼び出しは同じグローバル変数を変更します。

a = b() + c() + d();

この式は、関数が呼び出される順序によって、異なる結果になります。

式に結合属性と可換属性の両方がある演算子が含まれており、オペランドを演算子にグループ化する 順序が式の結果に影響を与える場合は、式をいくつかの式に 分離します。例えば、呼び出し先関数が変数 a に影響を与えるような副次作用を作成しない場合は、 次の式によって、前の例の式を置換できます。

a = b();
a += c();
a += d();

関連参照

IBM Copyright 2003