Выбор ответа Middle Сборка и линковка обновлено
Безымянное пространство имён
Вопрос
Что даёт namespace { int helper() { return 42; } } в .cpp-файле?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Внутреннее связывание: функция видна только в этом .cpp. Содержимое безымянного пространства имён имеет внутреннее связывание, как static на уровне файла.
Варианты ответа
- Функция становится глобальной для всего проекта без объявления
extern - Функция будет принудительно встроена в каждое место своего вызова
- Ничего: это то же самое, что объявить функцию вне всякого namespace
- Внутреннее связывание: функция видна только в этом
.cppправильный ответ
Разбор
Содержимое безымянного пространства имён имеет внутреннее связывание, как static на уровне файла. Два файла могут иметь свои helper без ошибки multiple definition, а компилятор свободнее оптимизирует.
- Глобальной функция как раз не будет.
- Встраивание решает компилятор, namespace на это не влияет напрямую.
- Разница принципиальная для линковки.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.