MediumкомпиляцияODR

Что такое единица трансляции (translation unit) и как она связана с ODR?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

Translation unit (TU) — результат препроцессирования одного .cpp со всеми включёнными через #include заголовками. Компилятор работает именно с TU. ODR (One Definition Rule) требует, чтобы каждая non-inline функция и переменная имела ровно одно определение во всей программе.

// a.cpp
int counter = 0;        // определение — должно быть одно
// b.cpp
extern int counter;     // объявление — можно сколько угодно
  • Нарушение ODR — UB, часто проявляется как ошибка линкера «multiple definition»;
  • Inline-функции и шаблоны — исключение: должны быть определены одинаково во всех TU.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.