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