MediumпреобразованияUB
Почему сравнение signed и unsigned часто даёт неожиданный результат?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
При сравнении signed с unsigned компилятор неявно приводит signed к unsigned. Если signed отрицательный, он становится огромным положительным числом.
std::vector<int> v;
int i = -1;
if (i < v.size()) { /* НЕ выполнится: (size_t)(-1) огромно */ }
// Правильно: не смешивать, использовать size_t для индексов
for (size_t k = 0; k < v.size(); ++k) { /* ... */ }
// или std::ssize (C++20)Правило: не смешивать signed/unsigned. При необходимости — явный cast с комментарием.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.