状況: 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# 言語の両方で本当にそうなのでしょうか?
私が以前に聞いたバージョンを他の誰かが聞いたことがありますか?