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