7

状況: C++ または C# での多くの基準による条件チェック:

if (condition1 && condition2 && condition3)
{
    // Do something
}

私は常に、これらのチェックが実行される順序は保証されていないと信じてきました。したがって、必ずしも最初に condition1、次に condition2、次に condition3 というわけではありません。私は C++ の時代にそれを学びました。そう言われたか、どこかで読んだ気がします。

知るまでは、次の状況で発生する可能性のある null ポインターを考慮して、常に安全なコードを作成してきました。

if ((object != null) && (object.SomeFunc() != value))
{
    // A bad way of checking (or so I thought)
}

だから私は書いていた:

if (object != null)
{
    if (object.SomeFunc() != value)
    {
        // A much better and safer way
    }
}

not-null チェックが最初に実行され、その後インスタンス メソッドが呼び出されて 2 番目のチェックが実行されるかどうか確信が持てなかったためです。

現在、私たちの最高のコミュニティの心は、これらのチェックが実行される順序は左から右の順序で実行されることが保証されていると言っています.

とても驚いています。C++ 言語と C# 言語の両方で本当にそうなのでしょうか?

私が以前に聞いたバージョンを他の誰かが聞いたことがありますか?

4

4 に答える 4

14

短答式は左から右へ短絡評価です。順序は予測可能です。

// perfectly legal and quite a standard way to express in C++/C#
if( x != null && x.Count > 0 ) ...

一部の言語では、分岐する前に条件のすべてを評価します (VB6 など)。

// will fail in VB6 if x is Nothing. 
If x Is Not Nothing And x.Count > 0 Then ...

参照: MSDN C# 演算子とその順序または優先順位。

于 2009-05-07T21:55:12.163 に答える
2

これらは左から右に評価され、そのうちの 1 つが false と評価されると評価を停止するように定義されています。これは、C++ と C# の両方に当てはまります。

于 2009-05-07T21:55:48.993 に答える