Вопрос

Мой вопрос по сути в названии. В основном я узнал, что в Java оператор && оператор действует как короткое замыкание, так что если первое условие оценивает ложь, он не смотрит на остальную часть утверждения. Я предполагал, что это было в C ++, но я пишу немного кода, который сначала проверяет, что индекс не превысил размер списка, затем сравнивает этот индекс в списке на другой номер. Что-то типа:

//let's say list.size()=4;

for(int i=0; i<10; i++)
{
   if(i < list.size() && list.get(i) == 5)
       //do something
   ...
}

Это не точный код, но он иллюстрирует точку. Я предполагаю, что, поскольку I> размер списка во втором половине не оценивается. Но кажется, что это все еще делает, и я верю, что это вызывает ошибку SEG. Я знаю, что могу использовать вложенные IFS, но это такое глазность и пустая трата пространства. Любая помощь?

Это было полезно?

Решение

Да, в C и C ++ && и || Операторы короткого замыкания.

Другие советы

Ярлыки работает так же в C, C ++ и Java.

Однако, учитывая пример код, вы можете получить SegFault, если list является null. Отказ C ++ не имеет эквивалента NullPointerexception Java. Если список может быть нулевым, вам нужно проверить для этого.

ОбновленныйПоследняя половина того, что только применяет, если список является указателем. (Который не похоже на него.) Если бы это было так, как будто это будет выглядеть:

if (list && i < list->size() && list->get(i) == 5)

да && ведет себя так же в Java, как в C ++. Это оператор короткого замыкания, а также точка последовательности в C ++]. Порядок оценки операндов хорошо определен, то есть слева направо.

C ++ && и || Операторы тоже делают короткокружитель тоже. Будьте осторожны, возможно, вы положите один и и C ++ используют двоичные и оператор TBE, который не короткосистен. Опубликовать более актуальный код, если вам нужна дополнительная помощь.

C ++ короткие схемы && и || Так же, как Java. в if(i < list.size() && list.get(i)) , list.get(i) не будет оценен, если i < list.size() неверно.

&& и || Операторы короткого замыкания, если не перегружены. Я считаю, что они могут быть перегружены, однако, в этом случае они не будут короткими цепью при использовании на типов, для которых была в результате чего перегрузка.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top