私はEffectiveC++を読み始めましたが、項目2のある時点で、次のことが言及されています。
// call f with the maximum of a and b
#define CALL_WITH_MAX(a, b) f((a) > (b) ? (a) : (b))
...
int a = 5, b = 0;
CALL_WITH_MAX(++a, b); // a is incremented twice
CALL_WITH_MAX(++a, b+10); // a is incremented once
ここで、fを呼び出す前にaがインクリメントされる回数は、比較対象によって異なります。
確かに、で単純な印刷ステートメントを使用するf
と、最初の呼び出しで7が印刷されますが、私は一生の間、その理由を理解できません。明らかな何かが欠けていますか?