Встроенный статический constexpr против глобального встроенного constexpr

Предположим, что у меня есть несколько переменных inline constexpr (с именами default_y и default_x) в заголовочном файле, и я решил переместить их в класс, с которым они полностью связаны, и пометить их static (потому что это кажется лучше с точки зрения дизайна).

namespace Foo
{

inline constexpr std::streamsize default_size { 160 }; // not closely related to the class Bar

class Bar
{
public:
    inline static constexpr std::uint32_t default_y { 20 }; // closely related to the class Bar
    inline static constexpr std::uint32_t default_x { 20 }; // closely related to the class Bar
};

}

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

Я построил программу один раз с помощью inline static и один раз с static, и не было никакой разницы в размере двоичного файла по сравнению с предыдущим решением, поэтому, возможно, компоновщик сгенерировал точно такой же код (надеюсь).

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
70
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Размещение static inline constexpr переменных никоим образом не должно влиять на эффективность. Из-за constexpr они инициализируются const во время компиляции, если это возможно. Ключевое слово inline здесь помогает вам инициализировать переменную static внутри тела class. Вам может быть интересен этот материал по ключевому слову inline: https://pabloariasal.github.io/2019/02/28/cpp-inlining/.

Хорошая статья. Я нашел то, что искал.

digito_evo 01.04.2022 08:24

Другие вопросы по теме