- 72 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 23:49:18 ]
- >>65
組み込み型に対する&&や||は短絡といって、 左から順に評価していって、 結果が分かったらそれ以降の評価を行わない仕組みになってる。 たとえば、 bool f1(); bool f2(); if ( f1() && f2() ) という式があったとすると、f1が偽の場合、f2は評価されないことが保証される。 しかし、&&や||のオーバーロードの場合は関数呼び出しと解釈されるため、短絡がない。 それどころか、関数呼び出し順序は標準に規定されていないため、 どちらが先に評価されるかすら分からない。 my_bool b1(); my_bool b2(); if ( b1() && b2() ) この場合、b1とb2のどちらが先に評価されるか分からない(処理系依存)。 分かりにくいバグの元になる、コードの可搬性を損なう、などの理由から &&や||のオーバーロードは推奨されない。
|

|