状況:多くの基準とCでの条件チェック++やC#:C++およびC#では、複数の条件チェックが事前またはランダムシーケンスで実行されていますか?
if (condition1 && condition2 && condition3)
{
// Do something
}
私は常にこれらのチェックが実行される順序が保証されていないと信じられてきました。したがって、必ずしも最初の条件1、条件2、条件3の順である必要はありません。私は私の時代にC++でそれを学んだ。私はそれを聞いたとかどこかに読んだと思う。
私は常に次のような状況で可能なヌルポインターを考慮するために、安全なコードを書いている知っているまで:
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#言語の両方で本当にそうですか?
私は今までに聞いたバージョンを他の誰かが聞いたことがありますか?
C#のサブ表現は、左から右、常に、ピリオドで評価されます。 C/C++の部分式は、シーケンスポイント順に評価されます。同じシーケンスポイント内の2つの式は、任意の順序で評価できます。正式な定義が必要な場合は、「シーケンスポイント」でウェブ検索を行います。 –