Название: Детали проверки условий Отправлено: fulkabaster от Февраль 15, 2010, 13:08 Интересует такая штука. Если есть выражение:
Код
то правильно ли я понимаю, что в любом случае проверяются оба условия - condition1 и condition2? А в этом случае, где вместо AND будет OR: Код
будет ли проверяться второе условие, если первое = true? Это к тому, что я нашел ресурс (http://www-igm.univ-mlv.fr/~lecroq/string/node14.html#SECTION00140), где объясняется работа поисковых алгоритмов (Boyer-Moore algorithm). В функции suffixes(char *x, int m, int *suff) используется переменная 'f', но она не инициализируется. Написал авторам, они ответили, что все правильно, т.к. по в первом цикле i = m-2, а g = m-1, и поэтому i<g, и f станет равной i. Но че-то я не доганаяю. Вот код: Код Первое встречающееся условие if (i > g && suff[i + m - 1 - f] < i - g) сработает непонятно, если проверяются оба выражение, т.к. во втором 'f' не инициализирована. Название: Re: Детали проверки условий Отправлено: DIMEDROLL от Февраль 15, 2010, 13:31 судя по моему опыту, то не проверяется, на практике встречал(а потом и сам писал) такой код:
Код: SomeClass *pointer_some_class; Название: Re: Детали проверки условий Отправлено: Amigo_sa от Февраль 15, 2010, 13:31 Интересует такая штука. Если есть выражение: Код
то правильно ли я понимаю, что в любом случае проверяются оба условия - condition1 и condition2? По стандарту С++ не проверяется второе условие, если первое - ложь. Мы в коде частенько используем выражение типа Код: if (pointer && pointer->doSomething()) Сообщество мыслит одинаково =) Название: Re: Детали проверки условий Отправлено: DIMEDROLL от Февраль 15, 2010, 16:28 а ты можешь привести цитату из стандарта?
ну или номер страницы... Название: Re: Детали проверки условий Отправлено: Amigo_sa от Февраль 15, 2010, 16:40 а ты можешь привести цитату из стандарта? http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdfну или номер страницы... стр. 101. пп.5.14.1 Цитировать The && operator groups left-to-right. The operands are both implicitly converted to type bool (clause 4). The result is true if both operands are true and false otherwise. Unlike &, && guarantees left-to-right evaluation: the second operand is not evaluated if the first operand is false. |