Я хотел бы знать, правильно ли это выглядит:
while((next !=NULL) && (strcmp(next->name, some_string) < 0) {
//some process
}
Я имею в виду, что если next равен NULL
, то вторая часть выражения никогда не будет проверяться компилятором? Я слышал, что в C++ это так (но я даже не уверен в этом).
Может ли кто-нибудь подтвердить мне, что я не буду получать странные ошибки на некоторых компиляторах с этим?
(next != NULL)
может использовать перегруженный оператор!=
для любого типаnext
. Этот оператор может возвращать другой тип, для которого&&
перегружен. А для перегруженного&&
встроенного замыкания нет, поэтому выражение на правой стороне будет оцениваться независимо от левой. - person Daniel Earwicker   schedule 18.10.2010