以下の式では、小括弧は、コンパイラーがオペランドや演算子をグループ化する方法を明示的に示します。
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 = 32767、prov_tax = -42、および city_tax = 32767、 ならびにこれら 3 つの変数すべてが整数として宣言されていた場合、3 番目のステートメント total = ((price + city_tax) + prov_tax) は、整数オーバーフローを引き起こすけれども、 他のステートメントは引き起こしません。
中間値が丸められるため、浮動小数点演算子の異なるグループ化は、異なる結果になる場合があります。
ある式では、オペランドや演算子のグループ化によっては、結果に影響を与えます。 例えば、次の式では、各関数呼び出しは同じグローバル変数を変更します。
a = b() + c() + d();
この式は、関数が呼び出される順序によって、異なる結果になります。
式に結合属性と可換属性の両方がある演算子が含まれており、オペランドを演算子にグループ化する 順序が式の結果に影響を与える場合は、式をいくつかの式に 分離します。例えば、呼び出し先関数が変数 a に影響を与えるような副次作用を作成しない場合は、 次の式によって、前の例の式を置換できます。
a = b(); a += c(); a += d();
関連参照