Sytuacja: Sprawdź stan w C++ lub C# z wielu kryteriów:W językach C++ i C# są sprawdzane wiele warunków w ustalonej lub losowej kolejności?
if (condition1 && condition2 && condition3)
{
// Do something
}
Zawsze wierzyłem w jakiej kolejności te kontrole są przeprowadzane nie jest gwarantowana. Zatem niekoniecznie jest to pierwszy warunek1, a następnie warunek2, a dopiero potem warunek3. Nauczyłem się tego w moich czasach z C++. Myślę, że powiedziano mi o tym lub przeczytałem gdzieś.
Aż wiedzieć Zawsze bezpieczny kod napisany w celu uwzględnienia ewentualnych zerowych wskaźników w następującej sytuacji:
if ((object != null) && (object.SomeFunc() != value))
{
// A bad way of checking (or so I thought)
}
Więc pisałem:
if (object != null)
{
if (object.SomeFunc() != value)
{
// A much better and safer way
}
}
bo nie byłem pewien, że Sprawdzanie not-null będzie uruchamiane jako pierwsze i tylko wtedy metoda instancji zostanie wywołana, aby wykonać drugą kontrolę.
Teraz nasze najwspanialsze umysły społeczności mówią mi, że kolejność przeprowadzania tych kontroli jest gwarantowana w kolejności od lewej do prawej.
Jestem bardzo zaskoczony. Czy to naprawdę tak w przypadku języków C++ i C#?
Czy ktoś jeszcze słyszał wersję, którą wcześniej słyszałem?
Podwyrażenia w C# są oceniane od lewej do prawej, zawsze, kropka. Podwyrażenia w C/C++ są oceniane w kolejności w kolejności. Dwa wyrażenia w tym samym punkcie sekwencji mogą być oceniane w dowolnej kolejności. Wykonaj wyszukiwanie w sieci w "punkcie sekwencji", jeśli potrzebujesz formalnej definicji. –