Могу ли я полагаться на оценку короткого замыкания для проверки границ вектора на С++?

Является ли следующий код приемлемым?

if(vector.size() > 0 && vector[0] == 3) {
}

Или есть вероятность, что он сработает, когда вектор пуст? Я не заметил этого, но я беспокоюсь, что это все еще возможно.

Ответ 1

Да, это работает, но было бы более идиоматично сказать !vector.empty() && vector[0] == 3: это будет работать для всех контейнеров с максимальной эффективностью, поэтому оно никогда не бывает хуже, иногда лучше и всегда более читаемо.

Ответ 2

Да, вы можете положиться на встроенный оператор && на короткое замыкание. Эта часть его спецификации.