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

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

      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и не было никакой разницы в размере двоичного файла по сравнению с предыдущим решением, поэтому, возможно, компоновщик сгенерировал точно такой же код (надеюсь).

0 ответов

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