簡潔で正確な答えは、単純に「Bjarne がそう決めたから」です。
どのオペランドをどの順序で評価する必要があるかについての引数は、何が起こるかについて技術的に正確な説明を提供しますが、この特定の演算子をオーバーロードできない理由を説明することはほとんどありません (実際には何もありません)。
operator &&
特に、同じ基本的な引数は、やなどの他の演算子にも同様に適用されますoperator||
。これらの各演算子の組み込みバージョンでは、左側のオペランドが評価され、それが1
for&&
または0
forを生成する場合にのみ||
、右側のオペランドが評価されます。同様に、(組み込みの) コンマ演算子は、左側のオペランドを評価してから、右側のオペランドを評価します。
これらの演算子のいずれかのオーバーロードされたバージョンでは、両方のオペランドが常に評価されます (指定されていない順序で)。そのため、この点ではオーバーロードされた三項演算子と本質的に同じです。それらはすべて、どのオペランドがどの順序で評価されるかについて、同じ保証を失います。
Bjarne がその決定を下した理由については、いくつかの可能性が考えられます。1つは、技術的には演算子ですが、三項演算子は主にフロー制御に専念しているため、それをオーバーロードすることは、他のほとんどの演算子をオーバーロードすることよりも、オーバーロードに似ていることですif
。while
別の可能性としては、構文的に見苦しく、パーサーが のようなものを処理する必要があり、トークンとしてoperator?:
定義する必要がある?:
などです。これらはすべて、C 文法にかなり深刻な変更を加える必要があります。少なくとも私の見解では、C++ はすでに Cよりもはるかに複雑なパーサーを必要とするため、この議論はかなり弱いように思われます。
おそらく、すべての中で最も強力な議論は、それが多くを達成するようには見えなかったということです. 主にフロー制御に専念しているため、一部のタイプのオペランドに対する動作を変更しても、非常に役立つことはほとんどありません。