1

たとえば、次の関数があるかどうかを知りたいです。

bool f(...) {
  //something here
  return true or f(...);
}

私はそれが戻ることを知っていますtrueが、ステートメントの他の部分を評価せずにそれを返しますか、それとも関数を再度評価しますか?

4

4 に答える 4

4

or'd されているオペランドの 1 つが true であることは既にわかっているため、これは関数を評価しません。同じことが次の場合にも起こります。

bool f(...) {
    return false and f(...)
}

これは短絡評価と呼ばれます。

于 2012-11-01T05:57:22.340 に答える
3

いいえ func() 呼び出しを評価しません。

LOGICAL OR は「左から右」に評価され、式が true を返すと停止します

とにかくチェックできます。テストしましたか?

以下のプログラムでテストします。

#include <iostream>
using namespace std;
bool func();
bool func2();
int main()
{
func();
}

bool func2()
{
cout <<"called me"<<endl;
return true;
}
bool func()
{
return (true ||func2());
}

単に実行され、コンソールに何も出力されません。

returnステートメントの上の同じ関数のコードの他の部分を意味する場合、はい、returnステートメントが一番下にある場合でも実行されます。再帰部分を意味する場合、そのステートメントの呼び出しの前に true があるため、実行されません。そうであったreturn false||func()場合、ここで再帰が発生します。

于 2012-11-01T05:58:03.943 に答える
1

この場合、結果はすでにわかっているため、 f を再度呼び出すことはありません。「遅延評価」または「短絡評価」を参照

于 2012-11-01T05:53:10.420 に答える
1

関数を評価せずに true を返します。or ステートメントでの最初の真の遭遇は残りが真であることを保証するので、それ以上評価するのは無意味です。

于 2012-11-01T05:53:46.863 に答える