Есть ли смысл объявлять статическую глобальную переменную как встроенную? - PullRequest
8 голосов
/ 25 сентября 2019

Учтите, что глобальная переменная (не статический член класса!) Объявлена ​​в заголовочном файле:

inline static int i{};

Это допустимая конструкция для нескольких протестированных мной компиляторов, и эксперименты показывают, что несколько отдельных объектов будутсоздается в разных единицах перевода, хотя он также объявляется как встроенный (это означает, что в программе должен существовать только один экземпляр этой переменной).Итак, имеет ли ключевое слово static более высокий приоритет, чем inline в этом случае?

1 Ответ

4 голосов
/ 25 сентября 2019

Итак, имеет ли статическое ключевое слово больший приоритет, чем встроенное в этом случае?

В значительной степени.static имеет эффект, который мешает inline.Стандарт C ++ гласит, что

... Встроенная функция или переменная с внешней связью должны иметь одинаковый адрес во всех единицах перевода.

Квалификатор static налагает внутреннюю связь , поэтому гарантию на один адрес не требуется.Теперь имя с внутренней связью в разных единицах перевода предназначено для обозначения разных объектов в каждом TU, поэтому предполагается получение нескольких различных i.

В общем, static отрицает inline.И нет смысла иметь переменную static inline поверх простой static.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...