Могу ли я полагаться на оценку короткого замыкания для проверки границ вектора на С++?
Является ли следующий код приемлемым?
if(vector.size() > 0 && vector[0] == 3) {
}
Или есть вероятность, что он сработает, когда вектор пуст? Я не заметил этого, но я беспокоюсь, что это все еще возможно.
Ответ 1
Да, это работает, но было бы более идиоматично сказать !vector.empty() && vector[0] == 3: это будет работать для всех контейнеров с максимальной эффективностью, поэтому оно никогда не бывает хуже, иногда лучше и всегда более читаемо.
Ответ 2
Да, вы можете положиться на встроенный оператор && на короткое замыкание. Эта часть его спецификации.