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 подскажет развёрнутый ответ в реальном времени.