情况:在 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
}
}
因为我不确定非空检查是否会首先运行,然后才会调用实例方法来执行第二次检查。
现在,我们最伟大的社区人士告诉我,这些检查的执行顺序保证以从左到右的顺序运行。
我很惊讶。C++ 和 C# 语言真的如此吗?
有人听过我以前听过的版本吗?