Меня интересует, что именно происходит «под капотом», когда следующая встроенная функция вызывается в нескольких единицах перевода.
namespace some_name
{
inline const float& get_float()
{
static const float a = 5.0f;
return a;
}
}
Мое намерение состояло в том, чтобы создать внешне связанную переменную 'a', которую можно было бы использовать во всем коде (если включен заголовок с пространством имен), но также я хотел предотвратить любое изменение этой переменной. Судя по тестированию, мне это удалось, но мне интересно, что именно происходит, когда я вызываю эту функцию в первый раз, а затем несколько раз в следующий раз.
Дополнительный вопрос: загрязняю ли я глобальное пространство имен объявлением / определением статической переменной?
a
имеет внешнюю связь? И зачем вам вообще нужна внешняя константа? Внешняя связь предполагает, что несколько единиц компиляции совместно используют один экземпляр переменной, и при его изменении каждая единица будет читать обновленное значение. Но не ожидается, что константа изменится. Более того, во многих случаях компилятор будет вставлять постоянное значение непосредственно в инструкцию, так что оно даже не появится в памяти. - person Eduard Malakhov   schedule 07.04.2017