Выбор ответа Middle Сборка и линковка обновлено

Безымянное пространство имён

Вопрос

Что даёт namespace { int helper() { return 42; } } в .cpp-файле?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Внутреннее связывание: функция видна только в этом .cpp. Содержимое безымянного пространства имён имеет внутреннее связывание, как static на уровне файла.

Варианты ответа

  1. Функция становится глобальной для всего проекта без объявления extern
  2. Функция будет принудительно встроена в каждое место своего вызова
  3. Ничего: это то же самое, что объявить функцию вне всякого namespace
  4. Внутреннее связывание: функция видна только в этом .cppправильный ответ

Разбор

Содержимое безымянного пространства имён имеет внутреннее связывание, как static на уровне файла. Два файла могут иметь свои helper без ошибки multiple definition, а компилятор свободнее оптимизирует.

  • Глобальной функция как раз не будет.
  • Встраивание решает компилятор, namespace на это не влияет напрямую.
  • Разница принципиальная для линковки.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.