complex mul(const comprex& a, const comprex& b)
{ return a * b; }

comprex result = mul(a, b);
まっとうな処理系ならこれで作成される一時オブジェクトは1個だけ。
オーバーヘッドにはならないよ